为什么EmguCV高斯模糊不返回与OpenCV高斯模糊相同的结果?
Why might EmguCV Gaussian blur not return identical results as OpenCV Gaussian blur?
我正在经历OpenCV GaussianBlur函数和EmguCv CvInvoke.cvSmooth/Image之间的不匹配。SmoothGaussian功能。
高斯模糊调用:
GaussianBlur(src, dest, Size(13,13), 1.5, BORDER_REPLICATE);
EmguCV调用:
CvInvoke.cvSmooth(src, dst, SMOOTH_TYPE.CV_GAUSSIAN, 13, 13, 1.5, 0);
在这两种情况下,src都是32F, 3通道图像。我已经验证了src的内容是相同的(将它们保存为bmp并执行二进制diff)。
在opencv中的cvSmooth调用看起来像这样:
CV_IMPL void
cvSmooth( const void* srcarr, void* dstarr, int smooth_type,
int param1, int param2, double param3, double param4 )
{
cv::Mat src = cv::cvarrToMat(srcarr), dst0 = cv::cvarrToMat(dstarr), dst = dst0;
if( smooth_type == CV_GAUSSIAN )
cv::GaussianBlur( src, dst, cv::Size(param1, param2), param3, param4, cv::BORDER_REPLICATE );
}
…它似乎在做同样的事情,我原来的OpenCV调用正在做。CV_GAUSSIAN在EmguCV和OpenCV中都被定义为2。结果非常接近,但是EmguCV图像比OpenCV图像稍微模糊一些。什么好主意吗?我还在EmguCV论坛上交叉发布了这个问题
问题是:
GaussianBlur(src, dest, Size(13,13), 1.5, BORDER_REPLICATE);
传递1.5作为sigma1, 1 (border_replication)作为sigma2。将Emgu代码更改为
CvInvoke.cvSmooth(src, dst, SMOOTH_TYPE.CV_GAUSSIAN, 13, 13, 1.5, 1);
结果为完美匹配。
相关文章:
- 在C++上实现高斯赛德尔迭代方法
- C++:矩阵高斯消除不起作用:使用单维数组来存储元素
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 用于创建高斯随机数的 c++ 函数
- 将高斯模糊应用于灰度图像
- 高斯雅各比法
- 用高斯Seidel红色黑色求解1D泊松方程
- 如何改变高斯分布(提升)中的种子
- 并行化高斯模糊链
- 为什么在 C++ 中实现高斯勒让德算法没有产生结果
- 使用高斯模糊进行图像卷积,可以加速
- 高斯模糊的SSE优化
- 使用帧缓冲进行高斯模糊 2 遍
- 实现高斯模糊-如何计算卷积矩阵(核)
- 为什么EmguCV高斯模糊不返回与OpenCV高斯模糊相同的结果?
- 三维数据的高斯模糊
- 高斯模糊算法
- OpenCV中的高斯模糊:在边界外设置0常数
- 高斯模糊与FFT问题
- Opengl - 高斯模糊位移/错位问题