[关闭]
@dragonfive 2015-10-30T07:37:35.000000Z 字数 2460 阅读 697

数字图像处理第一次作业

课内学习——马晓龙


第一题

题目

完成课本习题3.2(a)(b), 课本中文版《处理》第二版的113页。可以通过matlab帮助你分析理解。

解答

a、我的matlab代码如下,m=1/2,E=10

  1. % 下面是作业第一题
  2. f=imread('E:\资料\onedrive\code\test\image\Fig0310(a)(Moon Phobos).tif');
  3. f=im2double(f);
  4. subplot(2,2,1);imshow(f);title('原图');
  5. subplot(2,2,2);imhist(f);title('原图直方图');
  6. m=1/2;
  7. E=10;
  8. s=1./(1+(m./im2double(f)+eps).^E);
  9. subplot(2,2,3);imshow(s);title('展宽后的图');
  10. subplot(2,2,4);imhist(s);title('展宽后直方图');
  11. figure;
  12. r=[0:0.01:1];
  13. s=1./(1+(m./r).^E);
  14. plot(r,s);title('函数曲线');

程序运行结果

untitled.png

untitled.png

b、设计一组参数E的函数

下面设置不同的参数E得到的函数的曲线如下:

  1. m=0.5;
  2. A=[0:1:10];
  3. B=[10:10:100];
  4. r=[0:0.01:1];
  5. for E=[A B]
  6. s=1./(1+(m./r).^E);
  7. %subplot(2,2,1);
  8. plot(r,s);
  9. axis([0 1 0 1])
  10. set(gca,'xtick',0:0.1:1);
  11. set(gca,'ytick',0:0.1:1);
  12. xlabel('x');
  13. ylabel('y');
  14. hold on
  15. end

untitled.png

第二题

题目

一幅8灰度级图像具有如下所示的直方图,求直方图均衡后的灰度级和对应概率,并画出均衡后的直方图的示意图。(计算中取整采用四舍五入方法,图中的8个不同灰度级对应的归一化直方图为[0.17 0.25 0.21 0.16 0.07 0.08 0.04 0.02])

Paste_Image.png

解答

使用的公式

s=Gp(ω)1

计算得到的映射关系

原灰度 p(ω) 映射灰度
0 0.17 0
1 0.25 2
2 0.21 4
3 0.16 5
4 0.07 6
5 0.08 7
6 0.04 7
7 0.02 7

编写的matlab代码

  1. % 作业第二题
  2. G=8;
  3. p=[0.17 0.25 0.21 0.16 0.07 0.08 0.04 0.02];
  4. subplot(1,2,1);bar(p,0.2);set(gca,'XTickLabel',0:1:7);title('原始直方图')
  5. s=[];
  6. for i=1:8
  7. s=[s round(G*sum(p(1:i))-1)];
  8. end
  9. [m,n]=hist(s,unique(s))
  10. subplot(1,2,2);bar(m./8,0.2);set(gca,'XTickLabel',n);title('映射后的直方图')

得到的函数图像为:

untitled.png

第三题

题目

(选做题)课本习题3.6。对于离散的情况,用matlab进行一下实验。

编写的matlab程序

  1. % 作业第三题
  2. f=rgb2gray(imread('E:\资料\onedrive\code\test\image\lena.png'));
  3. subplot(3,2,1);imshow(f);title('原图');subplot(3,2,2);imhist(f);title('原图直方图');
  4. [count x]=imhist(f);
  5. rigin_ratio=count./numel(f); %计算每个灰度占的比例;
  6. %下面计算每个灰度映射后的灰度
  7. % img2=histeq(f,256);
  8. s=[];G=256;
  9. %sum(rigin_ratio(G))
  10. for i=1:G
  11. s=[s ceil(G*sum(rigin_ratio(1:i))-1)] ;
  12. end
  13. img2=f;
  14. [m,n]=size(f);
  15. for i=1:m
  16. for j=1:n
  17. img2(i,j)=s(f(i,j)+1);
  18. end
  19. end
  20. subplot(3,2,3);imshow(img2);title('映射后图');subplot(3,2,4);imhist(img2);title('映射后直方图');
  21. [count x]=imhist(img2);
  22. rigin_ratio=count./numel(f); %计算每个灰度占的比例;
  23. %下面计算每个灰度映射后的灰度
  24. % img3=histeq(f,256);
  25. s=[];G=256;
  26. %sum(rigin_ratio(G))
  27. for i=1:G
  28. s=[s ceil(G*sum(rigin_ratio(1:i))-1)] ;
  29. end
  30. img3=img2;
  31. [m,n]=size(img2);
  32. for i=1:m
  33. for j=1:n
  34. img3(i,j)=s(img2(i,j)+1);
  35. end
  36. end
  37. subplot(3,2,5);imshow(img3);title('映射后图');subplot(3,2,6);imhist(img3);title('映射后直方图');

程序运行结果

untitled.png

分析

从图中可以看出第一次直方图均衡和第二次直方图均衡的效果是一样的

第四题

题目

请用平方运算操作一副图片 用matlab作图

解答

  1. % 下面是在做平方运算;
  2. figure;
  3. img=imread('E:\资料\onedrive\code\test\image\lenargb.jpg');
  4. img=rgb2gray(img); %matlab把真彩图转化为灰度图;
  5. img=mat2gray(img); %读入的图片刚开始是uint8的,然后转化为double类型之后才能用mat2gray转化为0-1double
  6. i=1;
  7. for c=[0.04,0.1,0.2,0.4,0.67,1,1.5,2.5,5.0,10.0,25.0]
  8. y=img.^c;
  9. subplot(3,4,i); %把多个图片放在一起的方法;
  10. imshow(y);
  11. i=i+1;
  12. %hold on
  13. end

untitled.jpg

untitled.jpg

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注