matlab图像处理综合实验实验报告.docx
《matlab图像处理综合实验实验报告.docx》由会员分享,可在线阅读,更多相关《matlab图像处理综合实验实验报告.docx(35页珍藏版)》请在冰豆网上搜索。
![matlab图像处理综合实验实验报告.docx](https://file1.bdocx.com/fileroot1/2023-2/10/acd7d1d3-b197-4bad-81f4-c53a8ccaa4d2/acd7d1d3-b197-4bad-81f4-c53a8ccaa4d21.gif)
matlab图像处理综合实验实验报告
《数字图像处理》
实验报告
学院:
专业:
班级:
姓名:
学号:
实验一
实验名称:
图像增强
实验目的:
1.熟悉图像在Matlab下的读入,输出及显示;
2.熟悉直方图均衡化;
3.熟悉图像的线性指数等;
4.熟悉图像的算术运算及几何变换.
实验仪器:
计算机,Matlab软件
实验原理:
图像增强是为了使受到噪声等污染图像在视觉感知或某种准则下尽量的恢复到原始图像的水平之外,还需要有目的性地加强图像中的某些信息而抑制另一些信息,以便更好地利用图像。
图像增强分频域处理和空间域处理,这里主要用空间域的方法进行增强。
空间域的增强主要有:
灰度变换和图像的空间滤波。
图像的直方图实际上就是图像的各像素点强度概率密度分布图,是一幅图像所有像素集合的最基本统计规律,均衡化是指在每个灰度级上都有相同的像素点过程。
实验内容如下:
I=imread('E:
\cs.jpg');%读取图像
subplot(2,2,1),imshow(I),title('源图像')
J=rgb2gray(I)%灰度处理
subplot(2,2,2),imshow(J)%输出图像
title('灰度图像')%在原始图像中加标题
subplot(2,2,3),imhist(J)%输出原图直方图
title('原始图像直方图')
几何运算:
I=imread('E:
\cs.jpg');%读取图像
subplot(1,2,1),imshow(I);
theta=30;
K=imrotate(I,theta);
subplot(1,2,2),imshow(K)
对数运算:
I=imread('E:
\dog.jpg');
subplot(2,2,1),imshow(I),title('源图像')
J=rgb2gray(I)%灰度处理
subplot(2,2,2),imshow(J),title('灰度变换后图像')
J1=log(1+double(J));
subplot(2,2,3),imshow(J1,[]),title('对数变换后')
指数运算:
I=imread('E:
\dog.jpg');
f=double(I);
g=(2^2*(f-1))-1
f=uint8(f);
g=uint8(g);
subplot(1,2,1);subimage(f),title('变换一')
subplot(1,2,2);subimage(g),title('变换二')
加法运算:
clc;clearall;closeall;
i=imread('E:
\dog.jpg');
j=imnoise(i,'gaussian',0,0.02);
subplot(1,3,1),imshow(i),title('图一')
subplot(1,3,2),imshow(j),title('图二')
k=zeros(242,308);
forp=1:
100
j=imnoise(i,'gaussian',0,0.02);
j1=im2double(j);
k=k+j1;
end
k=k/100;
subplot(1,3,3),imshow(k),title('图三')
实验二
实验名称:
图像变换
实验目的:
(1)进一步对matlab的了解和使用;
(2)学习如何在matlab中对数字图像的处理;
实验原理:
图像和其他信号一样,既能在空间域处理,也能在频率域处理。
把图像信息从空域变换到频域,可以更好的分析加工处理。
因为图像信息的频域处理具有如下特点:
(1)能量守恒,但能量重新分配;
(2)有利于提取图像的某些特征;
(3)正交变换具有能量集中作用,可以实现图像的高效压缩编码;(4)频域用快速算法;
实验器材:
电脑matlab软件
实验内容:
(1)了解正交变换基本概念
(2)掌握图像的离散傅里叶和离散余弦变换
(3)熟悉图像的沃尔什及哈达玛变换
实验过程如下:
傅里叶变换
I=imread('E:
\dog.jpg')
I=rgb2gray(I)
J=fft2(I)
subplot(2,2,1),imshow(I),title('灰度变换')
J=fftshift(J)
subplot(2,2,2),imshow(log(abs(J)),[]),title('傅里叶变换')
J(abs(J)<5000)=0
subplot(2,2,3),imshow(log(abs(J)+eps),[]),title('滤波')
J=ifftshift(J)
K=ifft2(J)
subplot(2,2,4),imshow(K,[0255]),title('傅里叶逆变换')
余弦变换:
clearall;
RGB=imread('E:
\dog.jpg');
I=rgb2gray(RGB);
figure;imshow(I);title('灰度图像');
J=dct2(I);
figure;imshow(log(abs(J)),[]);
colormap(jet(64)),colorbar;title('二维离散余弦变换')
沃尔什—哈达玛变换:
I=zeros(2.^8);
I(2.^7-2.^4+1:
2.^7+2.^4,2.^7-2.^4+1:
2.^7+2.^4)=ones(2*2.^4);
subplot(1,2,1);colormap(gray(128)),imagesc(I);
[m,n]=size(I)
fork=1:
n
wht(:
k)=hadamard(m)*I(:
k)/m;
end
forj=1:
m
wh(:
j)=hadamard(n)*wht(j,:
)'/n;
end
wh=wh';
subplot(1,2,2);
colormap(gray(128)),imagesc(wh);
Radon变换:
R=radon(I,theta):
I表示待处理的图像,theta表示Radon变换的方向角度,可以是一个标量或向量值。
R的每一列对应图像I在theta某祎角度的Radon变换值。
I=zeros(120,120);
I(25:
75,25:
75)=1;
figure;imshow(I);
theta=0:
180;[R,xp]=radon(I,theta);
figure;imshow(R,[],'Xdata',theta,'Ydata',xp,...
'InitialMagnification','fit')
xlabel('\theta(degrees)')ylabel('x''')
colormap(hot),colorbar
iptsetpref('ImshowAxesVisible','off')
实验三
实验名称:
图像的复原
实验目的:
1.加深图像复原的相关原理,熟悉相关算法;
2.能够产生运动模糊图像,加入高斯,椒盐噪声,并对噪声进行中值,均值,最大值,最小值进行滤波复原;
3.对彩色图像RGB转换到HISI,并显示对应分量,同时完成相关平滑滤波。
实验仪器:
计算机,Matlab软件
实验原理:
图像复原的基本思路:
先建立退化的数学模型,然后根据该模型对退化图像进行拟图像复原合。
图像复原模型可以用连续数学和离散数学处理,处理项的实现可在空间域卷积,或在频域相乘.图像复原的基本任务:
消除模糊。
图像的退化主要是由系统的相关特性以及噪声两方面的因素所导致的,我们可以通过设计一个合适的复原滤波器(即实现逆滤波过程)来实现图像的复原。
图1中f(x,y)表示的是一幅静止、二维的图像,它在外部噪声n(x,y)的干扰作用之下,在经过系统h(x,y)之后,退化成为g(x,y),复原后的图像为f(x,y)。
针对于退化图像的复原,我们通常可以采用这样两种方式来进行:
其一,当对于原始图像缺乏必需的先验知识时,我们可以采用就退化过程建立一个模型,首先对其进行一个大概的描述,然后在复原的过程根据具体的情况进行逐步合理的修正,逐步消除误差影响。
这种方法建立在对图像的退化过程进行合理的估计的基础之上,从这个角度来看它是一种估计的方法;
其二,当我们对原始图像具有足够的先验知识时,我们这时候则直接针对原始图像建立一个精确的数学模型,然后再对退化图像进行复原处理,这种效果更好.
加入噪声:
I=imread('E:
\dog.jpg');%读取原图像
%考虑是否加入灰度处理
J1=imnoise(I,'salt&pepper',0.02);%加入椒盐噪声
J2=imnoise(I,'gaussian',0,0.01);%加入高斯白噪声
J3=imnoise(I,'poisson');%加入泊松噪声
J4=imnoise(I,'speckle',0.04);%加入乘法噪声
figure;
subplot(221),imshow(J1);title('加入椒盐噪声后图像')
subplot(222),imshow(J2);title('加入高斯白噪声后图像')
subplot(223),imshow(J3);title('加入泊松噪声后图像')
subplot(224),imshow(J4);title('加入乘法噪声后图像')
%对椒盐噪声和高斯白噪声进行imfilter滤波
rgb=imread('E:
\dog.jpg');
h=ones(5,5)/25;
rgb1=imfilter(rgb,h);
rgb2=imfilter(rgb1,h,'replicate');
figure;
subplot(1,3,1);imshow(rgb);title('Original');%原始
subplot(1,3,2);imshow(rgb1);title('Filtered');%一维滤波
subplot(1,3,3);imshow(rgb);title('boundaryreplication');%边缘滤波
%增加运动滤波,水平边缘增强,拉普拉斯滤波
rgb=imread('E:
\dog.jpg');
h1=[0,0,0.0000,0.0021,0.0042;0.1958,0.1979,0.2000,0.1979,0.1958;0.0042,0.0021,0.0000,0,0];
h2=[1,2,1;0,0,0;-1,-2,-1];
h3=[0.1667,0.6667,0.1667;0.6667,-3.3333,0.1667;0.1667,
0.6667,0.1667];
rgb1=imfilter(rgb,h1);
rgb2=imfilter(rgb,h2);
rgb3=imfilter(rgb,h3);
figure;
subplot(2,2,1),imshow(rgb),title('原图像')
subplot(2,2,2),imshow(rgb1),title('运动滤波')
subplot(2,2,3),imshow(rgb2),title('水平边缘增强')
subplot(2,2,4),imshow(rgb3),title('拉普拉斯滤波')
%fspecial产生线性滤波器
rgb=imread('E:
\dog.jpg');
h1=fspecial('average',[5,3]);
h2=fspecial('gaussian',[5,3],1);
h3=fspecial('laplacian',0);
rgb1=imfilter(rgb,h1);
rgb2=imfilter(rgb,h2);
rgb3=imfilter(rgb,h3);
figure;
subplot(2,2,1),imshow(rgb),title('原图像')
subplot(2,2,2),imshow(rgb1),title('均值滤波')
subplot(2,2,3),imshow(rgb2),title('高斯滤波')
subplot(2,2,4),imshow(rgb3)
I=imread('E:
\dog.jpg');%二值化函数的输入图像既可以是彩色图像也可以是灰度图像
th=graythresh(I);%自动确定二值化的最佳阈值
J=im2bw(I,th);%二值化阈值可以自己设定,值为0-1之间,而不是0-255,这一点要切记
subplot(121),imshow(I);
subplot(122),imshow(J);
产生运动模糊图像
clc;clearall;
I=imread('E:
\dog.jpg');
subplot(121);imshow(I);title('原始图像');
H=fspecial('motion',20,45);
MotionBlur=imfilter(I,H,'replicate');
subplot(122);imshow(MotionBlur);title('运动模糊图像');
clc;clearall;
I=imread('eight.tif');
J=imnoise(I,'salt&pepper',0.02);
K=medfilt2(J);
subplot(121);imshow(J);title('加入椒盐噪声的图像');
subplot(122);imshow(K);title('中值滤波的图像');
clc;clearall;
I=imread('snowflakes.png');
MAX=ordfilt2(I,25,ones(5,5));
MIN=ordfilt2(I,1,ones(5,5));
subplot(221);imshow(I);title('原始图像');
subplot(222);imshow(MAX);title('最大值滤波');
subplot(223);imshow(MIN);title('最小值滤波');
实验四
实验名称:
图像的检测与分割
实验目的:
(1)进一步对matlab的了解和使用;
(2)学习如何在matlab中对数字图像的处理;
实验原理:
数字图像处理主要目的:
一是对图像进行加工和处理,得到满足人的视觉和心理需要的改变进行式。
二是对图像中的目标物进行分析很理解,包括:
(1)把图像分割成不同目标物和背景的不同区域;
(2)提取正确代表不同目标物特点的特征参数,并进行扫描;
(3)对图像中目标物进行识别和分类;
实验器材:
电脑matlab软件
实验内容:
(1)了解图像分割的概念
(2)掌握阈值分割及边缘点检测的基本方法
(3)对检测目标图像提取特征并进行分析
实验过程:
图像分割:
指的是将数字图像细分为多个图像子区域(像素的集合)(也被称作超像素)的过程,就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。
它是由图像处理到图像分析的关键步骤。
图像分割的目的是简化或改变图像的表示形式,使得图像更容易理解和分析。
图像分割通常用于定位图像中的物体和边界(线,曲线等)。
更精确的,图像分割是对图像中的每个像素加标签的一个过程,这一过程使得具有相同标签的像素具有某种共同视觉特性。
图像分割的结果是图像上子区域的集合(这些子区域的全体覆盖了整个图像),或是从图像中提取的轮廓线的集合(例如边缘检测)。
一个子区域中的每个像素在某种特性的度量下或是由计算得出的特性都是相似的,例如颜色、亮度、纹理。
邻接区域在某种特性的度量下有很大的不同。
现有的图像分割方法主要分以下几类:
基于阈值的分割、区域生长、区域分裂合并、分水岭算法、边缘分割(边缘检测)、直方图法、聚类分析、小波变换等。
(1)阈值分割及边缘点检测的基本方法
阈值分割:
双峰法、迭代法、OTSU方法
双峰法:
根据双峰法原理,观察到灰度图像直方图呈现明显的双峰状,则选取双峰之间的谷底所对应的灰度级作为阈值分割。
如上图,选取160作为分割点。
I=imread('E:
\dog.jpg');
I=rgb2gray(I);
imhist(I);
I=imread('E:
\dog.jpg');
I=rgb2gray(I);
figure
subplot(1,2,1)
imshow(I);
[width,height]=size(I);
title('原图')
fori=1:
width
forj=1:
height
if(I(i,j)<230)
RC(i,j)=0;
else
RC(i,j)=1;
end
end
end
subplot(1,2,2)
imshow(RC)
title('双峰法图像阈值分割处理效果图')
直方图如下
迭代法
I=imread('E:
\dog.jpg');
I=rgb2gray(I);
Figure,subplot(1,2,1)imshow(I);title('原图')
clc;clearall;closeall;
I=imread('E:
\dog.jpg');
I=rgb2gray(I);
Figure,subplot(1,2,1)imshow(I);title('原图');
I=double(I);
T=(min(I(:
))+max(I(:
)))/2;
done=false;
i=0;
while~done
r1=find(I<=T);
r2=find(I>T);
Tnew=(mean(I(r1))+mean(I(r2)))/2;
done=abs(Tnew-T)<1;
T=Tnew;
i=i+1;
end
I(r1)=0;
I(r2)=1;
subplot(1,2,2);imshow(I);title('迭代效果图');
OTSU方法
I=imread('E:
\dog.jpg');
I=rgb2gray(I);
figure
subplot(1,2,1)
imshow(I);
title('原图');
[width,height]=size(I);
level=graythresh(I);
BW=im2bw(I,level);
subplot(1,2,2)
imshow(BW);
title('OSTU阈值分割效果图');
边缘点检测:
Prewitt算子检测图像的边缘、不同σ值的LoG算子检测图像的边缘、Canny算子检测图像的边缘
I=imread('bacteria.BMP');
BW1=edge(I,'prewitt',0.04);
figure
(1);
imshow(I);
figure
(2);
imshow(BW1);
Prewitt算子检测图像的边缘
I=imread('E:
\bacteria.BMP');
BW1=edge(I,'log',0.003);%σ=2
imshow(BW1);title('σ=2')
BW1=edge(I,'log',0.003,3);%σ=3
figure,imshow(BW1);title('σ=3')
不同σ值的LoG算子检测图像的边缘
I=imread('E:
\bacteria.BMP');
imshow(I);
BW1=edge(I,'canny',0.2);
figure,imshow(BW1);
Canny算子检测图像的边缘
(2)对检测目标图像提取特征并进行分析(基于区域的图像特征提取)
a=imread('E:
\dog.jpg');
%读入图像
subplot(2,2,1);
%设置原始图像显示位置
imshow(a);
%显示原始图像
title('原始图像');
%命名为原始图像
f=rgb2gray(a);
%将原始图像转换成灰度图像
B=medfilt2(f);
%将图像进行中值滤波
subplot(2,2,2);
%设置灰度图像显示位置
imshow(B);title('灰度图像');
seedx=[256,128,300];
seedy=[128,256,284];
holdon
plot(seedx,seedy,'gs','linewidth',1);title('灰度图像处理');
B=double(B);
markerim=B==B(seedy
(1),seedx
(1));
fori=2:
length(seedx)
markerim=markerim|(B==B(seedy(i),seedx(i)));
end
thresh=[15,10,15];
maskim=zeros(size(B));
fori=1:
length(seedx)
g=abs(B-B(seedy(i),seedx(i)))<=thresh(i);
maskim=maskim|g;
end
[g,nr]=bwlabel(imreconstruct(markerim,maskim),8);
g=mat2gray(g);
subplot(2,2,3);imshow(g);title('最终结果');
seedx=[156,78,300];
seedy=[78,156,284];
holdon
plot(seedx,seedy,'gs','linewidth',1);title('灰度图像处理');
B=double(B);
markerim=B==B(seedy
(1),seedx
(1));
fori=2:
length(seedx)
markerim=markerim|(B==B(seedy(i),seedx(i)));
end
thresh=[15,10,15];
maskim=zeros(size(B));
fori=1:
length(seedx)
g=abs(B-B(seedy(i),seedx(i)))<=thresh(i);
maskim=maskim|g;
end
[g,nr]=bwlabel(imreconstruct(markerim,maskim),8);
g=mat2gray(g);subplot(2,2,3);imshow(g);title('最终结果');
seedx=[256,128,300];
seedy=[128,256,284];
holdon
plot(seedx,seedy,'gs','linewidth',1);title('灰度图像处理');
B=double(B);
markerim=B==B(seedy
(1),seedx
(1));
fori=2:
length(seedx)
markerim=markerim|(B==B(seedy(i),seedx(i)));
end
thresh=[15,10,15];
maskim=zeros(size(B));
fori=1:
length(seedx)
g=abs(B-B(seedy(i),seedx(i)))<=thresh(i);
maskim=maskim|g;