【发布时间】:2014-03-21 22:38:21
【问题描述】:
我正在尝试在图像上应用 8X8 可分离均值滤波器 过滤器是 2D 可分离的。
我正在从 Matlab 转换以下代码,
内核 = 个(n);
% for conv 2 without zeropadding
LimgLarge = padarray(Limg,[n n],'圆形');
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 参数得到相同的结果。
顺便说一句,我知道 copyMakeBorder 函数,但不使用它,因为 sepFilter2D 自己处理区域。
【问题讨论】:
-
能否上传原图、matlab结果和OpenCV结果?
-
当然可以,但这需要我几个小时,你可以使用任何虚拟图像来代替
-
定义“不同的结果”
-
这些不是数值差异,算法差异很大,我会尽快更新帖子
标签: c++ matlab opencv image-processing