实验七 图像的代数运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验七图像的代数运算
一、实验目的
1、理解数字图像处理中代数运算的基本作用;
2、掌握在MTLAB中对图像进行代数运算的方法。
二、实验原理
代数运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两幅图像参加运算。在一般情况下,输入情况之一可能为常数。
四种图像处理代数运算的数学表达式如下:
C x y A x y B x y
=+
(,)(,)(,)
=-
C x y A x y B x y
(,)(,)(,)
C x y A x y B x y
=⨯
(,)(,)(,)
=÷
(,)(,)(,)
C x y A x y B x y
其中A(x,y)和B(x,y)为输入图像,而C(x,y)为输出图像。还可以通过适当的组合形成涉及几幅图像的复合代数运算方程。
在MA TLAB中,我们可以用函数imread很容易的得到数字图像的图像数据矩阵(即A(x,y)和B(x,y)),有了这些矩阵后我们只要适当地设计代数运算的形式并写出方程,就可以得到一个输出图像的矩阵(即C(x,y))。
图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效的降低加性随机噪声的影响。在求平均值的过程中,图像的静止部分不会改变,而对每一幅图像,各不相同的噪声图案则累积很慢。对M幅图像进行平均,使图像中每一点的平方信噪比提高了M倍,幅度信噪比是功率信噪比的平方根,因此达到了提高信噪比降低噪声的作用。
本次实验要求完成人为的往一幅图像中加入随机噪声,并通过多次相加求平均的方法降低所加入的噪声对图像的影响。
在MA TLAB中提供了给图像加入噪声的函数imnoise,imnoise的语法格式为J = imnoise(I, type)
J = imnoise(I, type, parameters)
其中J = imnoise(I, type)返回对原始图像I添加典型噪声的有噪图像J。参数type和parameters 用于确定噪声的类型和相应的参数。
下面的命令是对图像eight.tif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:
例:
I = imread('eight.tif');
J1 = imnoise(I, 'gaussian', 0, 0.02);
J2 = imnoise(I, 'salt & pepper', 0.02);
J3 = imnoise(I, 'speckle', 0.02);
subplot(2,2,1), imshow(I), title('原图像');
subplot(2,2,2), imshow(J1), title('加高斯噪声');
subplot(2,2,3), imshow(J2), title('加椒盐噪声');
subplot(2,2,4), imshow(J3), title('加乘性噪声');
在MA TLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中间结果。
代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLAB中FOR END循环的用法如下:
for end循环
这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:
for variable = expression
statements
end
举例如下:
例:
%一个简单的for循环的例子。
for i=1:10;
y(i)=i;
end;
y %显示y的结果
y =
1 2 3 4 5 6 7 8 9 10
为了得到最大的速度,在for循环被执行之前,应预先分配数组。例如前面所考虑的这一种情况,在for循环内每执行一次命令,向量y的维数增加1。这样就使得MATLAB每通过一次循环对y分配更多的内存,这当然要花费一定的时间。为了可以不执行这个步骤,for 循环的例子应重写为:
y=zeros(1,10);
for i=1:10;
y(i)=i;
end;
y
另外,再次强调一下,在实际的对图像处理过程中,由于我们读出的图像数据一般是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此读出的图像数据不能直接进行相加求平均,因此必须先使用一个函数将图像数据转换成双精度型数据,然后再进行相加运算。运算完成后,在图像显示前再将图像数据转换为uint8型。MATLAB中提供了这样的函数:im2double,uint8,double等函数。
作为一个示例,现将刚刚显示的加有噪声的图像进行相加求平均以消除图像的噪声。在图像中我们给图像加的是均值为0,方差为0.02的高斯噪声,将图像相加了一百遍,再求其平均值。程序如下:
%例图像加噪声再通过多次相加求平均的方法祛除噪声
[I, M] = imread('eight.tif');
J = imnoise(I, 'gaussian', 0, 0.02);
subplot(1,2,1), imshow(I, M), title('原图像');
subplot(1,2,2), imshow(J, M), title('加噪声后图像');