Matlab 图像处理中卷积的几种实现
代码
clear;close all;clc img1 = rand(5,5); % 输入图像 img2 = rand(5,5); % 核 % 卷积的几种实现方式 a = conv2(img1,img2,'same'); b = imfilter(img1,rot90(img2,2)); c = imfilter(img1,img2,'conv'); d = filter2(rot90(img2,2),img1); % 对比 cmp = [a(:),b(:),c(:),d(:)];
总结
观察 cmp 矩阵后发现三者数值一样,但通过计算误差发现,仍然存在极小的误差,这与函数的实现原理有关,因此可以近似地认为以上三种方法能够获得一样的卷积效果。
- 使用 conv2(A,B) 实现卷积,A 为图像,B 为核。
- 使用 imfilter(A,rot90(B)) 实现卷积,A 为图像,B 为核。因为该函数主要功能是实现滤波的,即直接对应位置元素加权求和,但卷积需要翻转 180 度,故使用 rot90(),逆时针翻转 2 个 90 度,再滤波即为卷积。或者直接指定其滤波类型为卷积,即 imfilter(A,B,'conv'), A 为图像,B 为核。
- 使用 filter2(rot90(B),A) 实现卷积,A 为图像,B 为核。filter2 是 imfilter2 的单通道形式,即只能处理单通道滤波,故同样先翻转 180 度再做滤波,这里核的位置在前面,需要尤其注意。
未经作者授权,禁止转载
THE END
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步