文档库

最新最全的文档下载
当前位置:文档库 > 基本数字图像处理算法的matlab实现

基本数字图像处理算法的matlab实现

matlab实现

1.数字图像处理的简单介绍

所谓数字图像就是把传统图像的画面分割成为像素的小的离散点,各像素的灰度值也是用离散值来表示的。

数字图像处理是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。

2.图像的显示与运算

2.1图像的显示

Matlab显示语句

imshow(I,[low high])%图像正常显示

I为要显示的图像矩阵。,[low high]为指定显示灰度图像的灰度范围。高于high的像素被显示成白色;低于low的像素被显示成黑色;介于high和low之间的像素被按比例拉伸后显示为各种等级的灰色。

subplot(m,n,p)

打开一个有m行n列图像位置的窗口,并将焦点位于第p个位置上。

2.2图像的运算

灰度化将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。图像的灰度化处理可用两种方法来实现。

第一种方法使求出每个像素点的R、G、B三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。

第二种方法是根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应:Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值。

灰度直方图是灰度级的函数,它表示图象中具有每种灰度级的象素的个数,反映图象中每种灰度出现的频率。

图像增强的目标是改进图片的质量,例如增加对比度,去掉模糊和噪声,修正几何畸变等;图像复原是在假定已知模糊或噪声的模型时,试图估计原图像的一种技术。

Matlab图像格式转换语句

rgb2gray(I) %从RGB图创建灰度图

imhist(I) %画灰度直方图

图像的线性变换

D B=f(D A)=f A*D A+f B

Matlab源代码:

I1=imread('F:\图片2.jpg');

subplot(2,2,1);imshow(I1);title('原图');

I2=rgb2gray(I1); %灰度化图像

subplot(2,2,2);imshow(I2);title('灰度化后图');

[M,N]=size(I2);

subplot(2,2,3)

[counts,x]=imhist(I2,60); %画灰度直方图counts=counts/M/N;

stem(x,counts);title('灰度直方图');

g=zeros(M,N); %图像增强

bmin=min(min(I2));

bmax=max(max(I2));

for i=1:M

for j=1:N

g(i,j)=I2(i,j)*1.5+30;

end

end

g=uint8(g);

subplot(2,2,4);imshow(g);title('增强后图');

运行效果图:

基本数字图像处理算法的matlab实现

2.3图像的傅里叶变换

图像的傅立叶变换,原始图像由N行N列构成,N必须是基2的,把这个N*N个包含图像的点称为实部,另外还需要N*N个点称为虚部,因为FFT是基于复数的,计算图像傅立叶变换的过程很简单:首先对每一行做一维FFT,然后对每一列做一维FFT。具体来说,先对第0行的N个点做FFT(实部有值,虚部为0),将FFT输出的实部放回原来第0行的实部,FFT输出的虚部放回第0行的虚部,这样计算完全部行之后,图像的实部和虚部包含的是中间数据,然后用相同的办法进行列方向上的FFT变换,这样N*N的图像经过FFT得到一个N*N的频谱。

Matlab源代码:

I1=imread('F:\图片2.jpg'); %读入原图像文件

I1=rgb2gray(I1);

subplot(1,2,1);imshow(I1); title('原图'); %显示原图像

fftI1=fft2(I1); %二维离散傅立叶变换

sfftI1=fftshift(fftI1); %直流分量移到频谱中心

RR1=real(sfftI1); %取傅立叶变换的实部

II1=imag(sfftI1); %取傅立叶变换的虚部

A1=sqrt(RR1.^2+II1.^2); %计算频谱幅值

A1=(A1-min(min(A1)))/(max(max(A1))-min(min(A1)))*225;%归一化

subplot(1,2,2);imshow(A1); title('傅里叶变换后图'); %显示原图像的频谱

运行效果图:

基本数字图像处理算法的matlab实现

3.图像的去噪算法与实现

中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让

周围的像素值接近的真实值,从而消除孤立的噪声点。方法是去某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为2*2,3*3区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。

均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身)。再用模板中的全体像素的平均值来代替原来像素值。均值滤波也称为线性滤波,其采用的主要方法为领域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度个g(x,y),即个g(x,y)=1/m ∑f(x,y)m为该模板中包含当前像素在内的像素总个数。

高斯滤波实质上是一种信号的滤波器,其用途是信号的平滑处理,我们知道数字图像用于后期应用,其噪声是最大的问题,由于误差会累计传递等原因,很多图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。与此相关的有Gauss-Lapplace变换,其实就是为了得到较好的图像边缘,先对图像做Gauss平滑滤波,剔除噪声,然后求二阶导矢,用二阶导的过零点确定边缘,在计算时也是频域乘积=>空域卷积。

Matlab源代码:

I1=imread('F:\图片2.jpg');

l=[1 1 1 %对椒盐噪声算术均值滤波

1 1 1

1 1 1];

l=l/9;

I1=rgb2gray(I1);

subplot(3,2,1);imshow(I1);title('原图');

I2=imnoise(I1,'salt & pepper',0.04); %在图像中加入椒盐噪声

subplot(3,2,2);imshow(I2);title('加噪声后图');

I3=conv2(I2,l); %均值滤波

subplot(3,2,3);imshow(I3,[]);title('进行均值滤波');

I4=medfilt2(I2,[3,3]); %中值滤波

subplot(3,2,4);imshow(I4);title('进行中值滤波');

h=ones(3,3)/9; %多维滤波

w=h;

g=imfilter(I1,w,'conv','replicate')

subplot(3,2,5);

imshow(g);title('进行多维滤波');

h3=fspecial('gaussian',[3,3],0.5);%高斯低通滤波

B4=filter2(h3,I1);

subplot(3,2,6);

imshow(B4,[ ]);

title('高斯低通滤波');

运行效果图:

基本数字图像处理算法的matlab实现