이미지 상단에 8X8 분리형 평균 필터를 적용하려고합니다. 필터는 2D 분리 가능합니다. 내가 matlab에에서 다음 코드를 변환하고있어sepFilter2D Opencv 예기치 않은 결과가
,
커널 = 것들 (N);
제로 파트가없는 전환 2에 대한 %
LimgLarge = padarray (Limg, [n n], 'circular');
LimgKer = conv2 (LimgLarge, Kernel, 'same')/(n^2);
LKerCorr = LimgKer (n + 1 : end-n, n + 1 : end-n);
첫 번째는 필터 크기로 이미지를 채우고, 2d를 상관시키고, 마지막으로 이미지 영역을 자릅니다.
지금, 나는라는 다음 명령보다, 내가 이미지를로드 한 OpenCV의
를 사용하여 C++에서 같은 일을 구현하기 위해 노력하고있어 나는 같은 결과를받을 것으로 예상
m_kernelSize = 8;
m_kernelX = Mat::ones(m_kernelSize,1,CV_32FC1);
m_kernelX = m_kernelX/m_kernelSize;
m_kernelY = Mat::ones(1,m_kernelSize,CV_32FC1);
m_kernelY = m_kernelY/m_kernelSize;
sepFilter2D(m_logImage,m_filteredImage,m_logImage.depth(),m_kernelX,m_kernelY,Point(-1,-1),0,BORDER_REPLICATE);
, 하지만 여전히 Matlab과 완전히 다른 결과를 얻고 있습니다.
필자는 이미지를 채우지 않고 상관 관계를 확인한 다음 이미지를 다시 자르지 않고 BORDER_REPLICATE 인수를 사용하여 동일한 결과를 예상했습니다.
btw, 나는 copyMakeBorder 함수를 알고 있지만 sepFilter2D가 영역을 단독으로 처리하기 때문에이를 사용하지는 않습니다. 당신이 코드가, 나는 두 가지 잠재적 인 결함을 볼 수 있습니다 보여 니펫을하기 전에 당신은 단지 이미지를로드하는 것을 때문에
어떤 도움은 매우
원본 이미지, matlab 결과 및 OpenCV 결과를 업로드 할 수 있습니까? – scap3y
물론, 몇 시간 걸리 겠지만 더미 이미지를 대신 사용할 수 있습니다 – TripleS
"다른 결과"를 정의하십시오 –