数字图像处理1.docx
- 文档编号:23550206
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:33
- 大小:1.17MB
数字图像处理1.docx
《数字图像处理1.docx》由会员分享,可在线阅读,更多相关《数字图像处理1.docx(33页珍藏版)》请在冰豆网上搜索。
数字图像处理1
数字图像处理上机报告
题目:
数字图像处理上机报告(第1次)
学校:
中国地质大学(武汉)
指导老师:
傅华明
姓名:
班级序号:
日期:
2013年9月22日
目录
1-0基本要求···········································3
1-1计算图象的统计参数·································8
1-2图象的灰度变换·····································9
1-3空域平滑··········································11
1-4空间锐化··········································15
1-5图像缩放··········································18
1-6实验总结··········································23
1-0基本要求:
题目要求:
1.显示一个灰度图象(在p01-p10中选)和彩色图象(在p13-p14中选);
2.观察灰度图象和彩色图象的数据矩阵和文件内容;
3.熟悉灰度图象、二值图象、彩色图象和索引图象之间的变换。
算法设计:
1.导入灰度图像和彩色图像。
2.打开图像数组观察数据矩阵。
3.输入指令读取图像的文件信息。
4.利用Matlab库函数实现灰度图象、二值图象、彩色图象和索引图象之间的变换。
5.读取变换前后的图像并比较观察。
程序代码:
p01=imread('P01.tif');%读取灰度图像P01
p14=imread('p14.jpg');%读取彩色图像P14
p02=imread('P04.tif');%读取灰度图像P02,为之后的题目做准备
p04=imread('P04.tif');%读取灰度图像P04,为之后的题目做准备
BW_p01=im2bw(p01,0.5);%将灰度图像转换为二值图像
BW_p14=im2bw(p14,0.5);%将彩色图像转换为二值图像
[Q_p14,map_p14]=rgb2ind(p14,32);%将彩色图像转换为32色索引图像
[Q_p014,map_p014]=rgb2ind(p14,64);%将彩色图像转换为64色索引图像
[Q_p01,map_p01]=gray2ind(p01,32);%将灰度图像转换为32色索引图像
[Q_p001,map_p001]=gray2ind(p01,64);%将灰度图像转换为64色索引图像
[Q_BW_p01,map_BW_p01]=gray2ind(BW_p01,32);%将二值图像转换为索引图像
BW_Q_p14=im2bw(Q_p14,map_p14);%将索引图像转换为二值图像
R_p14=ind2rgb(Q_p14,map_p14);%将索引图像转换为彩色图像
G_p04=ind2gray(Q_p14,map_p14);%将索引图像转换为灰度图像
GR_p14=rgb2gray(p14);%将彩色图像转换为灰度图像
GR_p01=ind2gray(Q_p01,map_p01);%将索引图像转换为灰度图像
%以下代码作用是显示处理过后的图像
%灰度图像实验
subplot(2,2,1);
imshow(p01);
title('初始图像');
subplot(2,2,2);
imshow(BW_p01);
title('变换为二值图像');
subplot(2,2,3);
imshow(Q_p01,map_p01);
title('变换为32色的索引图像');
subplot(2,2,4);
imshow(Q_p001,map_p001);
title('变换为64色的索引图像');
%彩色图像实验
figure;
subplot(2,2,1);
imshow(p14);
title('初始图像');
subplot(2,2,2);
imshow(BW_p14);
title('变换为二值图像');
subplot(2,2,3);
imshow(Q_p14,map_p14);
title('变换为32色的索引图像');
subplot(2,2,4);
imshow(Q_p014,map_p014);
title('变换为64色的索引图像');
%索引图像实验
figure;
subplot(2,2,1);
imshow(Q_p14,map_p14);
title('初始图像');
subplot(2,2,2);
imshow(BW_Q_p14);
title('变换为二值图像');
subplot(2,2,3);
imshow(R_p14);
title('变换为彩色图像');
subplot(2,2,4);
imshow(G_p04);
title('变换为灰度图像');
%二值图像实验
figure;
subplot(1,2,1);
imshow(BW_p01);
title('初始图像');
subplot(1,2,2);
imshow(Q_BW_p01,map_BW_p01);
title('变换为32色索引图像');
%显示图像的文件信息
imfinfo('P01.tif')%读取图像P01的文件信息
运行结果:
1.灰度图像的处理
2.彩色图像的处理
3.索引图像处理
4.二值图像的处理
5.显示图像的文件信息
输入指令:
imfinfo('P01.tif');
可得图像P01的文件信息如下:
Filename:
'F:
\R2012b\workspace\P01.tif'
FileModDate:
'12-五月-200000:
48:
08'
FileSize:
263838
Format:
'tif'
FormatVersion:
[]
Width:
512
Height:
512
BitDepth:
8
ColorType:
'indexed'
FormatSignature:
[7373420]
ByteOrder:
'little-endian'
NewSubFileType:
0
BitsPerSample:
8
Compression:
'Uncompressed'
PhotometricInterpretation:
'RGBPalette'
StripOffsets:
8
SamplesPerPixel:
1
RowsPerStrip:
512
StripByteCounts:
262144
XResolution:
[]
YResolution:
[]
ResolutionUnit:
'None'
Colormap:
[256x3double]
PlanarConfiguration:
'Chunky'
TileWidth:
[]
TileLength:
[]
TileOffsets:
[]
TileByteCounts:
[]
Orientation:
1
FillOrder:
1
GrayResponseUnit:
0.0100
MaxSampleValue:
255
MinSampleValue:
0
Thresholding:
1
Offset:
262152
1-1计算图象的统计参数
题目要求:
对图象p02计算其灰度的熵
算法设计:
程序代码:
function[H]=Calculate_H(x)
%计算图像的熵
%使用方法:
输入一个图像数组(uint型),输出其熵值
%Detailedexplanationgoeshere
[C,R]=size(x);%获得图像数组的尺寸
Level=256;
nk=zeros(Level);%建立数组用于统计各灰度出现次数
H=0;%默认图像熵为0
fori=1:
C%遍历图像各点,依次进行灰度统计并储存于数组
forj=1:
R
ImageLevel=x(i,j)+1;
nk(ImageLevel)=nk(ImageLevel)+1;
end
end
%遍历数组,依次按公式计算各灰度出现的概率及图像的熵
fork=1:
256
P(k)=nk(k)/(C*R);
ifP(k)~=0
H=-P(k)*log2(P(k))+H;
end
end
end
运行结果:
根据上文所编写的代码,在Matlab命令窗口执行如下代码可计算P02的熵值:
H=Calculate_H(p02)
结果如下图所示:
1-2图象的灰度变换
题目要求:
对图象p04实施灰度平方变换
算法设计:
1.导入图像。
2.建立变换后图像存储空间。
3.遍历图像各点,依公式进行平方变换。
程序代码:
function[y]=GrayLevle2(x,Level)
%灰度平方变换
%使用方法:
输入一个图像数组(uint型)和灰度等级,输出其灰度平方变换后的图像数组
[C,R]=size(x);%获得图像数组的尺寸
y=zeros(C,R);%建立变换后图像存储空
y=double(x);%将输入数组转换为double型,以免平方后溢出
%并可提供精度
Level=256;%默认灰度等级为256
%遍历图像各点,依次进行依公式进行平方变换
fori=1:
C
forj=1:
R
y(i,j)=y(i,j)*y(i,j)/(Level-1);
end
end
y=uint8(y);%将输出数组类型还原
subplot(1,2,1);%显示变换前后的灰度直方图
imhist(uint8(x));
title('变换前的直方图');
subplot(1,2,2);
imhist(y);
title('变换后的直方图');
end
运行结果:
根据上文所编写的代码,在Matlab命令窗口执行如下代码可获得P04的灰度平方变换后的图像:
subplot(1,2,1);
imshow(p04);
title('初始图像');
G2_p04=GrayLevle2(p04,256);
subplot(1,2,2);
imshow(G2_p04);
title('平方变换后的图像');
效果如下图所示:
1-3空域平滑
题目要求:
对图象p04施加高斯噪声和椒盐噪声并实施最大均匀性平滑法(4.2.5节)
算法设计:
一、噪声施加算法:
1.导入图像。
2.使用matlab自带rand函数产生0~1的均匀噪声。
3.根据图像灰度范围和噪声系数r确定噪声具体数值。
4.施加噪声。
5.输出结果。
二、最大均匀性平滑算法
1.导入图像。
2.建立变换后图像存储空间。
2.遍历图像(不包括边框两行和边框两列)。
3.分别求出5个3*3窗口的梯度。
4.比较梯度,确定具体数值。
5.根据梯度最小值确定各点灰度值。
6.输出结果。
三、方差法评价空域平滑的效果
1.导入变换前后的图像数组
2.遍历个像素点计算变换前后图像灰度方差
3.输出方差值
程序代码:
1.Soble算子函数:
function[y]=Soble(p,i,j)
%Soble算子求梯度
%使用方法:
输入一个图像数组(double型)和一个坐标值,
%输出相应坐标点5个3*3窗口的梯度
dx=p(i+1,j-1)+2*p(i+1,j)+p(i+1,j+1)-p(i-1,j-1)-2*p(i-1,j)-p(i-1,j+1);
dy=p(i-1,j+1)+2*p(i,j+1)+p(i+1,j+1)-p(i-1,j-1)-2*p(i,j-1)-p(i+1,j-1);
y=sqrt(dx*dx+dy*dy);
end
2.求数组最小值函数:
function[y]=F_min(x)
%求数组最小元素
%输入一个一维数组(类型不限),输出数组最小元素
Length=size(x);
y=x
(1);
fori=1:
Length
ify>x(i)
y=x(i);
end
end
end
3.最大均匀性平滑法函数
function[y]=Function_1_34(x)
%最大均匀性平滑法
%输入一个图像数组(uint型),并对其做最大均匀性平滑处理
%并输出处理后的图像数组
[C,R]=size(x);%获得输出数组的尺寸
y=zeros(C,R);%建立建立变换后图像存储空间
y=double(x);%将输入将输入数组转换为double型,以免处理过程数据溢出
Gr=zeros(5);%建立存储梯度值的空间
%遍历图像各点,依次分别求出5个3*3窗口的梯度
fori=3:
(C-2)
forj=3:
(R-2)
Gr
(1)=Soble(y,i,j);
Gr
(2)=Soble(y,i-1,j-1);
Gr(3)=Soble(y,i+1,j-1);
Gr(4)=Soble(y,i-1,j+1);
Gr(5)=Soble(y,i+1,j+1);
Min=F_min(Gr);%比较梯度,求出梯度最小值
switchMin%求梯度最小窗口的平均灰度,并作为该点灰度值
caseGr
(1)
temp=y(i-1,j-1)+y(i,j-1)+y(i+1,j-1)+y(i-1,j)+y(i,j)...
+y(i+1,j)+y(i-1,j+1)+y(i,j+1)+y(i+1,j+1);
y(i,j)=temp/9;
caseGr
(2)
temp=y(i-2,j-2)+y(i-1,j-2)+y(i,j-2)+y(i-2,j-1)...
+y(i-1,j-1)+y(i,j-1)+y(i-2,j)+y(i-1,j)+y(i,j);
y(i,j)=temp/9;
caseGr(3)
temp=y(i,j-2)+y(i+1,j-2)+y(i+2,j-2)+y(i,j-1)...
+y(i+1,j-1)+y(i+2,j-1)+y(i,j)+y(i+1,j)+y(i+2,j);
y(i,j)=temp/9;
caseGr(4)
temp=y(i-2,j)+y(i-1,j)+y(i,j)+y(i-2,j+1)+y(i-1,j+1)...
+y(i,j+1)+y(i-2,j+2)+y(i-1,j+2)+y(i,j+2);
y(i,j)=temp/9;
otherwise
temp=y(i,j)+y(i+1,j)+y(i+2,j)+y(i,j+1)+y(i+1,j+1)...
+y(i+2,j+1)+y(i,j+2)+y(i+1,j+2)+y(i+2,j+2);
y(i,j)=temp/9;
end
end
end
y=uint8(y);%将处理后的数组转换为灰度图像数组类型
end
4.计算两幅图像的灰度方差
function[value]=Fangchapingjia(x,y)
%方差评价法评估滤波效果
%导入变换前后的图像数组,输出方差值
[C,R]=size(x);%获得输出数组的尺寸
x=double(x);%将输入数组转换为double型,以免处理过程数据溢出
y=double(y);
s=0;
fori=1:
C%遍历个像素点计算变换前后图像灰度方差
forj=1:
R
s=s+(y(i,j)-x(i,j))*(y(i,j)-x(i,j));
end
end
value=s/(C*R);
end
运行结果:
根据上文所编写的代码,在Matlab命令窗口执行如下代码,可对图像P04施加高斯噪声和椒盐噪声,并对其进行最大均匀性平滑法处理,并观察效果:
注:
该算法调用了Soble算子计算梯度,而每次调用Soble算子必须把整个图像数组全部导入一遍,故而程序耗时较大,算法改进办法为:
放弃调用Soble算子,直接在函数中进行实时计算,这样一来,程序代码看起来比较杂乱,但可以有效缩短程序执行时间。
GS_p04=imnoise(p04,'gaussian',0.02);%加入高斯噪声
JY_p04=imnoise(p04,'salt&pepper',0.02);%加入椒盐噪声
y1=Function_1_34(GS_p04);
y2=Function_1_34(JY_p04);
subplot(2,2,1);
imshow(GS_p04);
title('加入高斯噪声的图像');
subplot(2,2,2);
imshow(JY_p04);
title('加入椒盐噪声的图像');
subplot(2,2,3);
imshow(y1);
title('处理后的高斯噪声图像');
subplot(2,2,4);
imshow(y2);
title('处理后的椒盐噪声图像');
div1=Fangchapingjia(p04,y1);%评估高斯噪声的滤波效果
div2=Fangchapingjia(p04,y2);%评估椒盐噪声的滤波效果
效果如下图所示:
由计算方差结果和图像实际效果可看出,该算法对高斯噪声的滤波效果更好
注:
上图为计算两幅图像变换前后的灰度方差,用以评估该算法对不同噪声的滤波效果
1-4空间锐化
题目要求:
根据Sobel算子,按照公式4.3.10和公式4.3.11对图象p04实施空间锐化。
算法设计:
1.导入图像。
2.遍历图像(不包括边框行和边框列)。
3.根据Sobel算子计算各点梯度。
4.比较梯度和门限值,确定该点数值。
5.输出结果。
程序代码:
注:
该函数用到的Sobel算子函数已在上文写出,在此不赘述。
function[y1,y2]=Function_1_44(x,t1,t2)
%根据Sobel算子,按照公式4.3.10和公式4.3.11对图象实施空间锐化
%使用说明:
输入一个图像数组(uint型),以及两个梯度阀值
%输出两个处理过的图像数组
[C,R]=size(x);%获得输出数组的尺寸
y1=zeros(C,R);%建立建立变换后图像存储空间
y2=zeros(C,R);%建立建立变换后图像存储空间
x=double(x);%将输入数组转换为double型,以免处理过程数据溢出
%遍历图像各点,依次分别求出各像素点的梯度
fori=2:
(C-1)
forj=2:
(R-1)
gra=Soble(x,i,j);
ifgra>=t1%根据阀值t1确定该点数值
y1(i,j)=gra;
else
y1(i,j)=50;
end
ifgra>=t2%根据阀值t2确定该点数值
y2(i,j)=100;
else
y1(i,j)=50;
end
end
end
y1=uint8(y1);%将处理后的数组转换为灰度图像数组类型
y2=uint8(y2);
end
运行结果:
根据上文所编写的代码,在Matlab命令窗口执行如下代码,可对图像P04的个像素点根据Soble算子求梯度,并根据设定的阀值做处理,并观察效果:
[y1,y2]=Function_1_44(p04,4,18);%输入要处理的图像,并设定梯度阀值
subplot(2,2,1);
imshow(p04);
title('原图像');
subplot(2,2,2);
imshow(y1);
title('按照公式4.3.10锐化后的图像');
subplot(2,2,3);
imshow(y2);
title('按照公式4.3.11锐化后的图像');
效果如下图所示:
由下图可看出,采用公式4.3.10锐化后的图像效果更佳,锐化后的图像边缘更加清晰,噪声较小。
1-5图像缩放:
题目要求:
1.水平和垂直两方向等比例缩放
2.水平和垂直两方向不等比例缩放
算法设计:
一、图像缩小
1.导入图像。
2.建立缩小后图像的数组
3.遍历图像,根据图像缩小系数对原图数组等间距取出灰度值并依此赋予新建缩小图数组。
4.输出结果。
二、图像放大
1.导入图像。
2.建立放大后图像的数组。
3.遍历图像,根据图像放大系数从原图数组取出灰度值并依此等间距赋予新建放大图数组。
4.放大图像数组的空缺部分用距离它最近点的原图像灰度值填充。
5.输出结果。
程序代码:
1.图像缩小
function[y]=Reduce(x,a,b,flag)
%图像缩小尺寸不变
%输入图像数组,纵、横向缩小系数,输出缩小后的图像
[C,R]=size(x);%获得输出数组的尺寸
ifflag==0
y=zeros(C,R);%flag=0缩小后图像尺寸不变
else
y=zeros(round(C*a),round(R*b));%flag=1缩小后图像尺寸变化
end
x=double(x);%将输入数组转换为double型,
%以免处理过程数据溢出
%遍历图像各点,依次进行图像缩小处理
fori=1:
C%对原图数组等间距取出灰度值并依此赋予新建缩小图数组
forj=1:
R
m=round(j*b+1);%按四舍五入发等间距取点
n=round(i*a+1);
if(m>R||n>C)
m=R;n=C;
end
y(n,m)=x(i,j);
end
end
y=uint8(y);%将处理后的数组转换为灰度图像数组类型
2.图像放大
function[y]=Amplify(x,a,b,flag)
%图像放大
%输
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理