数字图像(图像增强)实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验:图像增强
1.实验目的
(1)熟悉并学会使用MATLAB中图像增强的相关函数
(2)了解图像增强的办法、去噪的方法和效果。
2.实验主要仪器设备
(1)微型计算机:Intel Pentium及更高。
(2)MATLAB软件(含图像处理工具箱)。
(3)典型的灰度、彩色图像文件。
3.实验原理
(1)将一副图像视为一个二维矩阵,用MATLAB进行图像增强。
(2)利用MATLAB图像处理工具箱中的函数imread(读)、imshow(显示)、imnoise(加噪)、filter(滤波)对图像进行去噪处理。
(3)图像灰度修正:灰度变换。对不满意的图像通过线性或非线性灰度映射关系进行变换,其效果可以得到明显提高。通过分析,会发现变换前后图像的直方图也发生相应的变化。
(4)图像平滑方法:领域平均、中值滤波。分析图像降质的性质,区分平稳性还是非平稳型、加性还是乘性等,采用合适的去噪方法,可以去除或降低噪声对图像的影响。从频率域看,平均操作在降低噪声的同时衰减了图像的高频分量,会影响图像细节的重现。中值滤波对某些信号具有不变形,适用于消除图像中的突发干扰,但如果图像含有丰富的细节,则不宜使用。(5)图像锐化方法:人眼对目标的边缘和轮廓较为敏感,对图像进行锐化,有助于突出图像的这些特征。从频率域看,锐化提升了图像的高频分量。4.实验容
(1)图像灰度修正。
(2)图像平滑方法。
(3)图像锐化方法。
5.实验步骤
(1)图像灰度修正。读入一幅灰度级分布不协调的图像,分析其直方图。根据直方图,设计灰度变换表达式,或调用imadjuct函数。调整变换表达式的参数,直到显示图像的灰度级分布均衡为正。
(2)图像平滑方法。对有噪声图像或人为加入噪声的图像进行平滑处理。根据噪声的类型,选择不同的去噪方法,如领域平均、中值滤波等方法,调用filter2、medfilt2函数,选择不同的滤波模板和参数,观测和分析各种去噪方法对不同噪声图像处理的去噪或降噪效果。
(3)图像锐化方法。读入一幅边缘模糊地图像,利用罗伯茨梯度对图像进行4种蜕化处理,比较各自效果。
。
1.图像灰度修正
img = imread('d:\001.bmp'); figure();imshow(img);
I = double(img);
val=max(max(I));
a=log2(val);
b=round(a);
max_gray=2^b;
[H, W]=size(I);
J = zeros(H, W);
for i = 1 : H for j = 1 : W
J(i,j)=max_gray-1-I(i,j);
end % endfor j
end % endfor i
img2 = uint8(J);
subplot(1,2,1),imshow(img);title('原图');
subplot(1,2,2),imshow(img2);title('变换后');
imwrite(img2,'d:\2.bmp');
实验截图:
2.1程序代码:
img = imread('d:\LENA_8G_4bit.bmp');
figure();imshow(img);
subplot(2,1,1);imshow(img);
subplot(2,1,2);imshow(img);
I = double(img);%matlab 不支持uint8类型数据的矩阵运算,因此首先要将图像数据转换为double类型,计算后再转换为uint8类型
[H, W]=size(I);
J = zeros(H, W);
for i = 1 : H
for j = 1 : W
J(i,j) =255.0/15.0*I(i,j);
end;% endfor j
end; % endfor i
img2 = uint8(J);
subplot(1,2,1),imshow(img,[]);title('原图');
subplot(1,2,2),imshow(img2);title('变换后');
imwrite(img2,'d:\LENA_255G .bmp');
实验截图:
2.2程序代码:
img = imread('d:\LENA_255G .bmp');
figure();imshow(img);
subplot(2,1,1);imshow(img);
subplot(2,1,2);imshow(img);
I = double(img);%matlab 不支持uint8类型数据的矩阵运算,因此首先要将图像数据转换为double类型,计算后再转换为uint8
[H, W]=size(I);
J = zeros(H, W);
for i = 1 : H
for j = 1 : W
if I(i,j)<30
J(i,j)=I(i,j);
elseif I(i,j)<150
J(i,j) = 170.0/120.0*(I(i,j)-30)+30; else
J(i,j)= 55.0/105.0*(I(i,j)-150)+200; end;
end ;% endfor j
end; % endfor i
img2 = uint8(J);
subplot(1,2,1),imshow(img,[]);title('原图');
subplot(1,2,2),imshow(img2,[]);title('变换后'); imwrite(img2,'d:\L.bmp');
实验截图:
3.1程序代码:
img=imread('d:\GIRL_8G.bmp');
I = double(img);
[H, W]=size(I);
max_gray=max(max(I));
L=ceil(log2(max_gray));
gray=2^L-1;
x=0:gray;
y=zeros(1,gray+1); for i=1:H
for j=1:W y(img(i,j)+1)=y(img(i,j)+1)+1;
end;
end;
y1=y/(H*W);