2017-10-18 1 views
1

내 이미지에 필터 시퀀스를 복제하려고합니다.이를 위해 Filter2D 커널과 Gaussian 커널이 포함 된 커널을 만들어야합니다. 일반적으로 gaussianBlur를 적용한 다음 filter2D를 적용합니다. 이에 대한 일반적인 명령은 다음과 같습니다1D 가우시안 커널을 사용하여 Filter2D에서 사용자 정의 2D 커널을 수행하는 방법

kernel2D= Mat::ones(kernelSize, kernelSize, CV_32F) *(1/(float)(kernelSize*kernelSize)), Point(-1, -1); 
GaussianBlur(src, resultO, Size(kernelSize, kernelSize), sigma); 
filter2D(resultO, resultO, resultO.depth(), kernel2D, Point(-1, -1),0,BORDER_DEFAULT); 

그래서, 처음에는 매트 :: 이여을 사용 getGaussianKernel 방법 및 1D 커널을 사용하여 가우시안 커널을 만들 수 있습니다. 위의 코드와 같은 결과를 얻기 위해이 두 커널을 곱하려고했습니다. 나는이 과정을 수행 할 때

sigma = 0; 
    Mat mKernelGauss1 = getGaussianKernel(kernelSize, sigma, CV_32F); 
    mKernel2D = Mat::ones(1, kernelSize, CV_32F) *(1/(float)(1*kernelSize)), Point(-1, -1); 
    mResultKernel = mKernelGauss1 * mKernel2D; 

, 다음과 같이, 나는 kernelSize이 결과로 kernelSize 커널을 X 얻을, 그럼 나는 내 이미지에이 커널 (mResultKernel)를 적용 할 수 있습니다

filter2D(src, resultO, src.depth(), mResultKernel, Point(-1, -1), 0, BORDER_DEFAULT); 

내 문제가 내가 만든이 커널은 gaussianBlur와 filter2D를 순차적으로 수행하는 것과 같은 결과를 내게주지 않습니다. 위에서 제시 한 것처럼 하나의 2D 커널을 사용하여 filter2D 함수를 적용하고 내 이미지를 회선에 연결하려면이 방법을 따라야합니다.

답변

0

곱셈과 컨볼 루션 사이에 혼란스러워합니다. 필터 h(x)은 두 시퀀스 필터 f(x)g(x)에 대해 다음 형식으로 바꿀 수 있습니다. h(x) = f(x) * g(x) *은 회선 연산자입니다. 행렬 컨볼 루션에 대해서는 this lecture을 참조하십시오.

+0

참고 자료를 가져 주셔서 감사합니다.하지만 이미 filter2D를 사용하여 이미지를 convolving하고 있습니다. 커널을 생성하기 만하면됩니다. 그리고 그것이 내 문제입니다. –

관련 문제