数字图象处理系列问题研究(matlab实现)

图像处理 专栏收录该内容
2 篇文章 0 订阅

一、实验目的:

掌握基本的图象增强和变换方法,观察图象增强的效果,加深对图像增强和一些基本变换的理解。熟悉如何用matlab实验平台对图像进行增强和变换处理。

二、实验内容:

1.编程实现打开一个灰度图像,能够显示图像。

2.图像数字化以及相关操作(图像灰度的平均值,协方差矩阵,灰度标准差)

3.编程实现图像傅立叶变换和反变换,实现带噪小丑图像去除噪音。

4.用直接灰度变换改变图像(求反,增强对比度,动态范围压缩,灰度切分)

三、实验过程:

注:除小丑去噪外其他操作均用图1所示的Gem图像(Gem是我的网名);

这里面的所有图象我都先变换为灰度图

 判断是否为灰度图象:

flag=isgray(A)

 

判断是否为真彩图象:

flag=isrgb(A)

 

真彩图象→灰度图象:

 I=rgb2gray(A);

 

 

1.打开并显示一幅灰度图像:

matlab命令窗口中输入如下代码:

>>I=imread('d:/gem.bmp');

 >> flag=isgray(I) %判断是否是灰度图片flag=1ture是灰度图片;否则不是

 flag =

 

     1

 >>imshow(I)

 

所显示结果如下:


  1 原始gem图像

 

2.求图像灰度平均值,协方差矩阵和灰度标准差:

(1) 求灰度平均值

①    实现方式1:因为实验过程1中打开灰度图像时已完成图像的数字化,即图像已经变成一个矩阵,因此直接调用matlab自带的求矩阵均值函数mean2()求图像的均值。代码如下:

>>I=imread('d:/gem.bmp');

>>J=mean2(I)

 

J =

 

  189.8383

 

>> 

 

② 实现方式2:先调用size函数求出矩阵的大小,然后求出矩阵所有值的平均值即是原始图像的灰度均值。代码如下:

>>I=imread('d:/gem.bmp');%读入原始图像

 

>>[m,n]=size(I);    %求对应矩阵的规格,即图像的像素总数

>>J=double(I);    

>>a=0;           %变量a赋初值

>>for j=1:m       %循环求和

for k=1:n

a=a+J(j,k);

end

end

>>avg=a/(238*107)  %求平均

运行结果:avg =189.8383

 

(2)灰度标准差:

>>K=std2(I)

 

K =

 

   88.4966

 

>>

 

(3)协方差矩阵

cov(double(I))

    4.0607    4.2491    4.5113    4.8265    5.2313    6.1461    8.7791    8.6492    8.4031

    3.9241    4.0898    4.3327    4.6267    5.0069    5.9301    8.6492    8.8390    8.6943

    3.7321    3.8970    4.1378    4.4305    4.8065    5.7193    8.4031    8.6943    8.8302

    3.6235    3.7439    3.9634    4.2335    4.5807    5.4701    8.0734    8.4097    8.6483

    3.4612    3.5449    3.7612    4.0290    4.3694    5.2420    7.7879    8.1323    8.3975

    3.2847    3.3375    3.5481    3.8118    4.1397    4.9820    7.4237    7.7602    8.0192

    3.1529    3.2837    3.5100    3.7920    4.1366    4.9723    7.3915    7.6752    7.9027

    2.5251    2.6593    2.9130    3.2128    3.6099    4.4803    7.0184    7.2345    7.4691

    .....     .....

 

 

3.图像傅立叶变换和反变换

直接调用matlab自带的函数实现,代码如下:

 

>> I=imread('d:/gem.bmp');

>>C= fft2(double(I));         %对图像进行傅立叶变换

>> B=fftshift(fft2(double(I)));  %对频谱图进行平移处理

>> D=ifft2(B);              %傅立叶反变换

>> subplot(1,3,1), imshow(I)   %画图像原始图

>> subplot(1,3,2), imshow(log(abs(B)+1),[])  %画直接变换频谱图

>> subplot(1,3,3), imshow(abs(D),[])     %显示反傅立叶变换后的图像

显示效果如下:


                   图2 图像的傅立叶变换及其反变换

 

实现小丑图像去除噪音:

小丑图象除噪,是我经过多次探索才辛苦的弄出来的

 

>> A=imread('d:/小丑.jpg');

>> I=rgb2gray(A);

>> subplot(2,2,1),imshow(I);

>> B=fftshift(fft2(double(I)));

>> subplot(2,2,2),imshow(log(abs(B)+1),[]);

   %如图 对B里面的数据进行如下修改:

   (x,y)={(44,52),(107,41),(22,89),(87,76)}

   "这些点是我用QQ抓图定位"

  对上面(x,y)这些点为中心N8领域D8=2的幅值全部置为0 %


 

  图3显示的是对第一个点(4452)处理数据

 

>>subplot(2,2,3),imshow(log(abs(B)+1),[]);

>>D=ifft2(B);

>> subplot(2,2,4), imshow(abs(D),[])

>> 

显示效果如下:


 

                                          图4为除噪后的图片

 

 

4.用直接灰度变换改变图像

1)图像求反

图象求反即是让图象的像素分布反过来,即黑变白,白变黑。

%x1=y1时斜率k=1的效果:

代码如下:

>> I=imread('d:/gem.bmp');

>> subplot(2,2,1), imshow(I)

>> level=graythresh(I);

>> bw=im2bw(I,level);

>> subplot(2,2,2), imshow(bw);

>> x1=107;

>> y1=238;

>> subplot(2,2,3),plot([0,x1],[y1,0])

>> axis tight,xlabel('x'),ylabel('y')

>> title('变换曲线')

>> k=y1/x1;

>> [m,n]=size(I);

>> J=double(I);

>> for i =1:m

for j=1:n

x=J(i,j);

y(i,j)=0;

if (x>=0)&(x<=x1)

y(i,j)=y1-k*x;

else

y(i,j)=0;

end

end

end

>> subplot(2,2,4),imshow(mat2gray(y))

>> 

显示效果如下:


 

                                   图5求反

 

增强对比度:

代码如下:

>>I=imread('d:/gem.bmp');

>> subplot(1,3,1), imshow(I)

>> f0=0;g0=0;

>> f1=70;g1=30;

>> f2=180;g2=230;

>> f3=255;g3=255;

>> subplot(1,3,2),plot([f0,f1,f2,f3],[g0,g1,g2,g3])

>> axis tight,xlabel('f'),ylabel('g')

>> title('变换曲线')

>> r1=(g1-g0)/(f1-f0);

>> b1=g0-r1*f0;

>> r2=(g2-g1)/(f2-f1);

>> b2=g1-r2*f1;

>> r3=(g3-g2)/(f3-f2);

>> b3=g2-r3*f2;

>> [m,n]=size(I);

>> X2=double(I);

>> for i=1:m

        for j=1:n;

          f=X2(i,j);

          g(i,j)=0;

          if(f>=0)&(f<=f1)

           g(i,j)=r1*f+b1;

           elseif (f>=f1)&(f<=f2)

            g(i,j)=r2*f+b2;

           elseif (f>=f2)&(f<=f3)

            g(i,j)=r3*f+b3;

            end

          end

     end

>> subplot(1,3,3),imshow(mat2gray(g))

>> 

显示效果如下:


 

                                      图6增强对比度

       

动态范围压缩:

代码如下:

>> I=imread('d:/gem.bmp');

>> subplot(1,3,1), imshow(I)

>> c=255/log(256);

>> x=0:1:255;

>> y=c*log(1+x);

>> subplot(1,3,2),plot(x,y)

>> axis tight,xlabel('f'),ylabel('g')

>> title('变换曲线')

>> [m,n]=size(I);

>> X2=double(I);

>> for i=1:m

for j=1:n;

g(i,j)=c*log(X2(i,j)+1);

end

end

>> subplot(1,3,3),imshow(mat2gray(g))

>> 

显示效果如下:



 

                                     图7动态范围压缩

灰度切分 :

代码如下:

>> I=imread('d:/gem.bmp');

>> subplot(1,3,1), imshow(I)

>> s1=100;s2=200;g1=20;g2=200;

>> subplot(1,3,2),plot([0,s1,s1,s2,s2,255],[g1,g1,g2,g2,g1,g1])

>> axis tight,xlabel('f'),ylabel('g')

>> title('变换曲线')

>> [m,n]=size(I);

>> X2=double(I);

>> for i=1:m

     for j=1:n

        f=X2(i,j);

        g(i,j)=0;

        if(f>=s1)&(f<=s2)

        g(i,j)=g2;

      else

        g(i,j)=g1;

       end

   end

  end

>> subplot(1,3,3),imshow(mat2gray(g))

>> 

显示效果如下:


 

                                         图8灰度切分

四、心得:

   本次上机难点在于概念理解很重要,开始也许我课堂没有认真的听或者听的不是很深入,似懂非懂,导致上机时不知所措。课后在寝室认真的和同学讨论,收获非浅。

这次上机,最难的是小丑除噪,我使个很多方法才有这样的处理效果,开始由于概念不是很清楚对频谱图象直接涂黑,ifft2后发现全部为黑色,没有什么效果,后来对fft2变换后的图片进行上面的处理后才探索出这种方法,虽然效果不是很好,但是很有成就感。

通过这次实习,明白上课老师讲的概念如此重要,而且要有探索精神,勇于实践。


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值