图像卷积原理及MATLAB实现

数字图像卷积原理,matlab的conv2函数,不使用con2函数实现卷积

图像卷积原理

卷积,Convolution。卷积是两个变量在某范围内相乘后求和的结果。如果卷积的变量是序列x(n)和h(n),则卷积的结果为:
在这里插入图片描述
本文只讨论卷积在数字图像中的应用。
数字图像是二维离散信号,对图像进行卷积操作就是卷积模板在图像上滑动,如下图所示。
在这里插入图片描述
滑动的过程中,图像像素值和模板像素值对应位置相乘再相加得到的结果就是中心元素对应的卷积结果。比如在上图中,图像中原像素值为6(第二行第二列)卷积后得结果得到-3。

MATLAB函数conv2

首先可以通过lookfor convolution查看matlab所提供的卷积操作。
在这里插入图片描述
可以看到二维卷积函数是conv2,然后通过help conv2打开帮助文档,查看具体的conv2函数。
在这里插入图片描述
举例:

%% 图像卷积
clc,clear
I = imread('lenna1.jpg');
[M,N] = size(I);%获取原始图像大小
I = double(I);
%% conv2函数实现卷积
M1 = 1/9 * [1 1 1;1 1 1;1 1 1];% 3×3 邻域平均线性平滑滤波
I1 = conv2(I,M1,'same');
I2 = conv2(I,M1);
figure(1);
subplot(1,3,1);imshow(uint8(I));title('原图像');
subplot(1,3,2);imshow(uint8(I1));title('conv2函数实现卷积,与I大小相同的卷积');
subplot(1,3,3);imshow(uint8(I2));title('conv2函数实现卷积,完整卷积');

在这里插入图片描述
I为原图像,I1为卷积大小与I相同的卷积区域,I2为完全卷积区域。
在这里插入图片描述
通过查看具体I、I1、I2的数值,可以发现conv2在卷积时对于图像边缘的处理是补0处理。
在这里插入图片描述

MATLAB实现图像卷积

这里卷积模板使用了线性平滑滤波中最简单的邻域平均卷积模板,对于边缘的进行了忽略处理(即只选择了对应模板元素都在图像矩阵中的像素进行卷积)。

%% 图像卷积
clc,clear
I = imread('lenna1.jpg');
[M,N] = size(I);%获取原始图像大小
I = double(I);
%% conv2函数实现卷积
M1 = 1/9 * [1 1 1;1 1 1;1 1 1];% 3×3 邻域平均线性平滑滤波
I1 = conv2(I,M1,'same');
I2 = conv2(I,M1);
figure(1);
subplot(1,3,1);imshow(uint8(I));title('原图像');
subplot(1,3,2);imshow(uint8(I1));title('conv2函数实现卷积,与I大小相同的卷积');
subplot(1,3,3);imshow(uint8(I2));title('conv2函数实现卷积,完整卷积');
%% 不使用conv2函数进行卷积
M2 = 1/9 * [1 1 1;1 1 1;1 1 1];% 3×3 邻域平均线性平滑滤波
n = size(M2,1);
t = floor(n/2);
I3 = zeros(M,N);
%边缘没有进行卷积
for i = 1+t:M-t
     for j = 1+t:N-t
         I3(i,j) = sum(sum(M1 .* I(i-t:i+t,j-t:j+t)));
     end
end
figure(2);
subplot(1,3,1);imshow(uint8(I));title('原图像');
subplot(1,3,2);imshow(uint8(I1));title('conv2函数实现卷积,与I大小相同的卷积');
subplot(1,3,3);imshow(uint8(I3));title('不使用conv2函数进行卷积');

在这里插入图片描述
可看到I3的边缘都是0。
在这里插入图片描述

卷积神经网络(Convolutional Neural Network, CNN)是一种机器学习算法,广泛应用于计算机视觉任务,如图像分类和目标检测。当使用Matlab编写CNN程序时,可能会遇到一些故障,以下是常见的故障及其诊断方法: 1. 程序运行速度慢:CNN涉及大量矩阵运算,如果程序运行速度过慢可能是由于计算资源不足或者矩阵维度过大。决方法可以尝试使用更高性能的硬件设备运行程序,或者对数据进行降维处理。 2. 准确率低:CNN的准确率受到多个因素影响,如网络结构设计、超参数设置等。首先,可以检查网络结构是否合适,比如是否有足够的卷积层和池化层,是否有适当的全连接层。其次,可以尝试调整学习率、批次大小和迭代次数等超参数进行优化。 3. 梯度消失或梯度爆炸:CNN的训练过程中,梯度消失或梯度爆炸是一个常见的问题。梯度消失指的是反向传播时梯度趋近于零,导致网络无法更新;梯度爆炸则是梯度变得非常大,导致网络不稳定。可以通过使用合适的激活函数、权重初始化方法和正则化技术来决这些问题。 4. 内存溢出:CNN在处理大规模图像数据时,可能会导致内存溢出。这可以通过减小批次大小、使用数据增强技术(例如随机扩展或旋转图像)来缓。还可以考虑使用流式数据处理方法,分批加载数据。 5. 代码错误:在编写CNN程序时,可能会出现代码错误。常见的错误包括语法错误、变量命名错误和函数调用错误等。可以通过逐步调试程序,查找错误所在的位置,并使用Matlab提供的调试工具来修复错误。 要决CNN程序故障,需要理CNN的基本原理和常见问题,并有一定的编程和调试技巧。此外,还可以参考Matlab的文档和社区资源,以获取更详细的故障诊断方法。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值