matlab imfilter 对于 opencv filter2D 参数

将matlab 

img_l = imread("1.bmp"); //单通道图像

filter_edge = fspecial('sobel')';
img_sobel_l = (imfilter(img_l,fspecial('sobel')','same'));

对应opencv:

cv::Mat srcLTmp= cv::imread("1.bmp");  //单通道图像

cv::Mat srcL;
srcLTmp.convertTo(srcL, CV_32FC1);

cv::Point anchor(-1, -1);
double delta = 0;
float kernel[] = {  1, 0, -1 ,  2, 0, -2 ,  1, 0, -1  };
cv::Mat ker = cv::Mat(3, 3, CV_32FC1, &kernel);
cv::Mat dst = cv::Mat(srcL.size(), srcL.type());
cv::filter2D(srcL, dst, CV_32F, ker, anchor, delta, cv::BORDER_REFLECT101);


结果相对应;


http://www.cnblogs.com/a-toad/archive/2008/10/24/1318921.html

1.使用模板处理图像相关概念:     

      模板:矩阵方块,其数学含义是卷积运算。
      卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积核(权矩阵)的每个元素对应相
                乘,所有乘积之和作为区域中心像素的新值。
      卷积核:卷积时使用到的权用一个矩阵表示,该矩阵使用的图像区域大小相同,其行、列都是奇数,
              是一个权矩阵。
      卷积示例:
              3 * 3 的像素区域R与卷积核G的卷积运算:
              R5(中心像素)=R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9
            

2.使用模板处理图像的问题:
       边界问题:当处理图像边界像素时,卷积与图像使用区域不能匹配,卷积核的中心边界像素点对应,
                 卷积运算将出现问题。
       处理办法:
              A. 忽略边界像素,即处理后的图像将丢掉这些像素。
              B. 保留原边界像素,即copy边界像素到处理后的图像

3.常用模板

matlab imfilter 对于 opencv filter2D 参数_第1张图片
matlab imfilter 对于 opencv filter2D 参数_第2张图片

如果你刚刚接触图像处理,或者离开大学很长时间,看到卷积这个东西,肯定和我样感到晕菜.那么就复习下,并且实际的写个程序验证下,我保证你这辈子不会再忘记卷积的概念了.我们来看卷积的概念.
连续空间的卷积定义是 f(x)g(x)的卷积是 f(t-x)g(x) 在t从负无穷到正无穷的积分值.t-x要在f(x)定义域内,所以看上去很大的积分实际上还是在定范围的.
实际的过程就是f(x) 先做一个Y轴的反转,然后再沿X轴平移t就是f(t-x),然后再把g(x)拿来,两者乘积的值再积分.想象下如果g(x)或者f(x)是个单位的阶越函数. 那么就是f(t-x)g(x)相交部分的面积.这就是卷积了.
把积分符号换成求和就是离散空间的卷积定义了.那么在图像卷积卷积地是什么意思呢,就是图像就是图像f(x),模板是g(x),然后将模版g(x)在模版中移动,每到一个位置,就把f(x)g(x)的定义域相交的元素进行乘积并且求和,得出新的图像一点,就是被卷积后的图像. 模版又称为卷积核.卷积核做一个矩阵的形状.
卷积定义上是线性系统分析经常用到的.线性系统就是一个系统的输入和输出的关系是线性关系.就是说整个系统可以分解成N多的无关独立变化,整个系统就是这些变化的累加.
如 x1->y1, x2->y2; 那么A*x1 + B*x2 -> A*y1 + B*y2 这就是线性系统. 表示一个线性系统可以用积分的形式 如 Y = Sf(t,x)g(x)dt S表示积分符号,就是f(t,x)表示的是A B之类的线性系数.
看上去很像卷积呀,,对如果f(t,x) = F(t-x) 不就是了吗.从f(t,x)变成F(t-x)实际上是说明f(t,x)是个线性移不变,就是说 变量的差不变化的时候,那么函数的值不变化. 实际上说明一个事情就是说线性移不变系统的输出可以通过输入和表示系统线性特征的函数卷积得到.

你可能感兴趣的:(图像处理,C++,编程)