matlab 实现快速卷积操作 如高斯滤波/求图像梯度

图像处理程序经常会用到卷积操作,即用一个模板在图像上滑动并与模板下的图像内做

乘加操作,如高斯滤波。传统的做法是循环套循环的方式来写法,但在matlab中循环操作

很慢,为加快执行速度要尽量避免循环操作。

1:根据模板的尺寸[template_h,template_v],pad要处理的图像。

2:利用im2colstep函数,将原始图像中的每一块按列排布,组成template_h×template_vsize(im,1)*size(im,2)列的新图像矩阵。

3:将模板按列排布,并利用repmat函数扩展为template_h×templatesize(im,1)*size(im,2)

列的新模板矩阵。

4:模板矩阵和图像矩阵做相应元素的乘法后,按照列方向求和,得到1size(im,1)*size(im,2)列的新向量。

5:最后将新向量reshapesize(im,1)size(im,2)行的处理后的图像。

 

Tips:

1:matlabsize(im,1)指的是行数,即列向量的sizesize(im,2)指的是列数。sum(im,1)是在列

方向求和。

2.length返回尺寸较大的那一维的尺寸,如length(zeros(5,2)) = 5; length(zeros(2,5)) = 5;

3.类型转换回自动对数据进行饱和处理,如uint8(300) = 255;uint8(-10) = 0;C则不会。Matlab中的许多操作只对double型数据有效。

你可能感兴趣的:(matlab)