matlab 实现快速卷积操作 如高斯滤波/求图像梯度
2015-09-17 14:44
921 查看
图像处理程序经常会用到卷积操作,即用一个模板在图像上滑动并与模板下的图像内做
乘加操作,如高斯滤波。传统的做法是循环套循环的方式来写法,但在matlab中循环操作
很慢,为加快执行速度要尽量避免循环操作。
1:根据模板的尺寸[template_h,template_v],pad要处理的图像。
2:利用im2colstep函数,将原始图像中的每一块按列排布,组成template_h×template_v行size(im,1)*size(im,2)列的新图像矩阵。
3:将模板按列排布,并利用repmat函数扩展为template_h×template行size(im,1)*size(im,2)
列的新模板矩阵。
4:模板矩阵和图像矩阵做相应元素的乘法后,按照列方向求和,得到1行size(im,1)*size(im,2)列的新向量。
5:最后将新向量reshape成size(im,1)行size(im,2)行的处理后的图像。
Tips:
1:matlab中size(im,1)指的是行数,即列向量的size;size(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中循环操作
很慢,为加快执行速度要尽量避免循环操作。
1:根据模板的尺寸[template_h,template_v],pad要处理的图像。
2:利用im2colstep函数,将原始图像中的每一块按列排布,组成template_h×template_v行size(im,1)*size(im,2)列的新图像矩阵。
3:将模板按列排布,并利用repmat函数扩展为template_h×template行size(im,1)*size(im,2)
列的新模板矩阵。
4:模板矩阵和图像矩阵做相应元素的乘法后,按照列方向求和,得到1行size(im,1)*size(im,2)列的新向量。
5:最后将新向量reshape成size(im,1)行size(im,2)行的处理后的图像。
Tips:
1:matlab中size(im,1)指的是行数,即列向量的size;size(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型数据有效。
相关文章推荐
- PHP GD 图像处理组件的常用函数总结
- PHP图像处理之imagecreate、imagedestroy函数介绍
- 解析在main函数之前调用函数以及对设计的作用详解
- jsvascript图像处理―(计算机视觉应用)图像金字塔
- Javascript图像处理思路及实现代码
- java和matlab画多边形闭合折线图示例讲解
- PHP图像处理之使用imagecolorallocate()函数设置颜色例子
- java数字图像处理基础使用imageio写图像文件示例
- C#调用Matlab生成的dll方法的详细说明
- javascript图像处理―边缘梯度计算函数
- Javascript图像处理―阈值函数实例应用
- Javascript图像处理―虚拟边缘介绍及使用方法
- PHP图像处理类库及演示分享
- php图像处理函数大全(推荐收藏)
- Javascript图像处理―图像形态学(膨胀与腐蚀)
- Javascript图像处理―平滑处理实现原理
- 从java中调用matlab详细介绍
- VC++与Matlab混合编程的快速实现
- VTK学习笔记之图像处理
- vtk 图像处理 多种 操作