数字图像的增强处理1x.docx
《数字图像的增强处理1x.docx》由会员分享,可在线阅读,更多相关《数字图像的增强处理1x.docx(7页珍藏版)》请在冰点文库上搜索。
数字图像的增强处理
一、实验目的与要求
1、熟悉和掌握Matlab能处理的图像格式。
2、掌握在Matlab中图像的读取。
3、掌握数字图像的增强技术
4、能编程实现图像的平滑运算
二、实验内容
1、编程实现如下功能(邻域均值——denoising)
A、读入图像,如果是彩色图像,请先转换为灰度图像
B、输出图像的灰度直方图
C、向图像中添加噪声:
函数imnoise
D、如果一种处理方法的思想如下:
如果一个非边界像素点,其该像素点的灰度值可通过其8邻域内所有像素点的平均得到。
边界点不变。
请编程实现该处理方法,对C步的图像进行处理
E、将处理后的图像输出,并输出该图像的灰度直方图。
程序:
clcclear
img=imread('zhanglala.bmp');
ifnumel(size(img))>2 %如果是彩色图像就转换为灰度图像
img=rgb2gray(img);
endfigure;
imshow(img);
[m,n]=size(img);X=zeros(1,256);Y=zeros(1,256);X=0:
1:
255;
%计算直方图
fori=1:
m
forj=1:
n
Y(img(i,j)+1)=Y(img(i,j)+1)+1;
endendfigure;
plot(X,Y);%输出直方图
img=imnoise(img,'gaussian');%添加高斯噪声
%进一步处理图像
img=im2double(img);fori=1:
m
forj=1:
n
if(i~=1&&j~=1&&i~=m&&j~=n)%对非边界像素点进行处理
img(i,j)=(img(i-1,j-1)+img(i-
1,j)+img(i-1,j+1)+img(i,j-1)+img(i,j
+1)+img(i+1,j-1)+img(i+1,j)+img(i+1,
j+1))/9;
end
end
end
img=uint8(img*255);fori=1:
m
forj=1:
n
Y(img(i,j)+1)=Y(img(i,j)+1)+1;
endendfigure;
imshow(img);figure;
plot(X,Y);%输出灰度直方图
2、编程实现如下功能(卷积运算)
A、读入图像,如果是彩色图像,请先转换为灰度图像
B、输出图像的灰度直方图
C、如果一种处理方法的思想如下:
如果v是一个不超过0.88的正实数,gamma是matlab下的一个函数,其余变量为:
fa=1/gamma(2-v); h1=fa;
h3
0
h3
0
h3
0
h2 h2 h2
h3
h3 h2 h1 h2
h3
h2=fa*(2^(1-v)-2); h3=fa*((1-v)*(2^(-v))-(2^(1-v))+1);
h2
h3
0
h3
0
h3
0
h2
h2
0
图像的任一边界点保存不变。
非边界像素点,其该像素点计算方式为:
以x方向,见图中红线为例h1参数所在的位置为要处理的像素点f(i,j),则h2的位置为f(i+1,j),h3的位置为f(i+2,j),则f(i,j)的值为:
f’(i,j)=h1*f(i,j)+h2*f(i+1,j)+h3*f(i+2,j),其余7个方向以此方法计算;最后将8个方向上结果全部相加,将加后的结果除以8*(h1+h2+h3)作为最后该位置(i,j)的值。
f(i,j)=8个方向处理结果之和/(8*(h1+h2+h3))
其中:
右边红色箭头方向的计算
f(i,j)=h1*f(i,j) + h2*f(i+1,j)+h3*f(i+2,j)
右边的红色箭头
f(i,j)=h1*f(i,j) +h2*f(i-1,j)+h3*f(i-2,j)
东北方向:
f(i,j)=h1*f(i,j)+h2*f(i+1,j-1)+h3*f(i+2,j-2)
西南
f(i,j)=h1*f(i,j)+h2*f(i-1,j+1)+h3*f(i-2,j+2)
D、输入一个v值,按C的方法对图像进行处理,将处理后的图像输出,并输出该图像的灰度直方图。
程序:
clcclear
img=imread('zhanglala.bmp');
ifnumel(size(img))>2 %如果是彩色图像就转换为灰度图像
img=rgb2gray(img);
end
figure;imshow(img);
[m,n]=size(img);X=zeros(1,256);Y=zeros(1,256);X=0:
1:
255;
%计算直方图
fori=1:
m
forj=1:
n
Y(img(i,j)+1)=Y(img(i,j)+1)+1;
endendfigure;
plot(X,Y);%输出直方图
title('灰度直方图');
v=input('请输入V值(不能大于0.88):
');fa=1/gamma(2-v);
h1=fa;
h2=fa*(2^(1-v)-2);
h3=fa*((1-v)*(2^(-v))-(2^(1-v))+1);
%对图像进行处理
img=im2double(img);fori=1:
m
forj=1:
n
ifi>2&&i<=m-2&&j>2&&j<=n-2dir1=h1*img(i,j)+h2*img(i,j+1)
+h3*img(i,j+2);
dir2=h1*img(i,j)+h2*img(i,j-1)
+h3*img(i,j-2);
dir3=h1*img(i,j)+h2*img(i-1,j)
+h3*img(i-2,j);
dir4=h1*img(i,j)+h2*img(i+1,j)
+h3*img(i+2,j);
dir5=h1*img(i,j)+h2*img(i-1,j
-1)+h3*img(i-2,j-2);
dir6=h1*img(i,j)+h2*img(i-1,j
+1)+h3*img(i-2,j+2);
dir7=h1*img(i,j)+h2*img(i+1,j
-1)+h3*img(i+2,j-2);
dir8=h1*img(i,j)+h2*img(i+1,j
+1)+h3*img(i+2,j+2);
img(i,j)=(dir1+dir2+dir3+dir4+
dir5+dir6+dir7+dir8)/(8*(h1+h2+h3));end
end
end
img=uint8(img*255);figure;
imshow(img);fori=1:
m
forj=1:
n
Y(img(i,j)+1)=Y(img(i,j)+1)+1;
endendfigure;
plot(X,Y);%输出灰度直方图
title('灰度直方图');