0


图像处理操作

本文介绍了傅里叶变换处理,离散余弦变换,灰度增强,图像翻转,线性变换,对数变换,直方图均衡化,直方图规定化,均值和中值滤波和低通滤波

傅里叶变换处理图像

代码:

  1. I = imread('C:\Users\Administrator\Desktop\test\图片\3.png'); %读入图像
  2. imshow(I); %显示图像
  3. I1 = fft2(I); %计算2维傅里叶变换
  4. I2 = fftshift(I1); %直流分量移至中心
  5. figure;imshow(log(abs(I2)+1),[0,10]); %对数变换

结果:
在这里插入图片描述

测试不同图像结果:
在这里插入图片描述
在这里插入图片描述

离散余弦变换

代码:

  1. I = imread('C:\Users\Administrator\Desktop\test\图片\3.png') %读入图像
  2. I1 = dct2(I) %做dct变换
  3. figure;imshow(I) %显示原图像
  4. figure;imshow(log(abs(I1)),[0,5]); %显示dct变换结果

结果:
在这里插入图片描述

不同图像结果:

在这里插入图片描述
在这里插入图片描述

灰度增强

程序

  1. x = imread('C:\Users\Administrator\Desktop\test\图片\4.png')
  2. subplot(221);
  3. imshow(x);
  4. subplot(222);
  5. imshow(x.*3);
  6. subplot(223);
  7. imshow(x.*4.5);
  8. subplot(224);
  9. imshow(x.*5);

结果:
在这里插入图片描述

不同图像结果:
在这里插入图片描述

图像反转

程序:

  1. x = imread('C:\Users\Administrator\Desktop\test\图片\lena.png')
  2. subplot(121);
  3. imshow(x);
  4. subplot(122);
  5. imshow(255-x);

结果:
在这里插入图片描述

不同图像结果:

在这里插入图片描述在这里插入图片描述

线性变换

程序:

  1. x = imread('C:\Users\Administrator\Desktop\test\图片\hjh.jpg');
  2. subplot(131);
  3. imshow(x);
  4. subplot(132);
  5. imhist(x);
  6. y = imadjust(x,[0.2,0.8],[0,1]);
  7. subplot(133);
  8. imshow(y);

结果:
在这里插入图片描述
在这里插入图片描述

对数变换

程序:

  1. x=imread('C:\Users\Administrator\Desktop\test\图片\men.bmp');
  2. g=fft2(double(x));
  3. fg=abs(fftshift(g)); %幅度谱
  4. subplot(121);
  5. imshow(fg,[]);
  6. title('傅里叶谱');
  7. subplot(122);
  8. imshow(log(fg+1),[]);
  9. title('傅里叶频谱对数变换结果');

结果:

直方图均衡化

程序:

  1. I=imread('C:\Users\Administrator\Desktop\test\图片\men.bmp');
  2. subplot(221);
  3. imshow(I);
  4. subplot(222);
  5. imhist(I); %显示图像直方图
  6. [J,T]=histeq(I,64); %图像灰度扩展到0-255,但是只有64个灰度级
  7. subplot(223);
  8. imshow(J);
  9. subplot(224);
  10. imhist(J);

结果:
在这里插入图片描述

直方图规定化

程序:

  1. clc;clear;
  2. h=imread('C:\Users\Administrator\Desktop\test\图片\men.bmp');
  3. subplot(321);imshow(h);
  4. subplot(322);imhist(h);
  5. g=histeq(h,256);
  6. subplot(323);imshow(g);
  7. subplot(324);imhist(g,256);
  8. r=[0.05,zeros(1,9),0.05,zeros(1,9),0.05,zeros(1,9),0.05,zeros(1,9),0.05,zeros(1,9),0.05,zeros(1,9),0.05,zeros(1,39),0.05,zeros(1,19),0.05,zeros(1,19),0.05,zeros(1,19),ones(1,80).*0.0045,ones(1,66).*0.0088];
  9. k=histeq(h,r);
  10. subplot(325);
  11. imshow(k);
  12. subplot(326);
  13. imhist(k);

结果:
在这里插入图片描述

均值和中值滤波

程序:

  1. clc;clear;close
  2. I=imread('C:\Users\Administrator\Desktop\test\图片\lena.png');
  3. % I=I(:,:,2); %将lena图从3维转化为2
  4. subplot(221);
  5. imshow(I,[]);
  6. f=imnoise(I,'salt & pepper',0.04); %加噪(此处为椒盐噪声)
  7. subplot(222);
  8. imshow(f);
  9. H0=ones(3,3)/9; %3*3邻域模板
  10. g=imfilter(f,H0); %均值滤波
  11. subplot(223);
  12. imshow(g,[]);
  13. g2=medfilt2(f,[3,3]); %中值滤波
  14. subplot(224);
  15. imshow(g2)

结果:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

低通滤波

程序:

  1. clc;clear;close;
  2. %理想低通滤波
  3. I1=imread('C:\Users\Administrator\Desktop\test\图片\lena.png');
  4. I1=I1(:,:,2); %将lena三维转二维
  5. subplot(231);
  6. imshow(I1);
  7. xlabel('原图');
  8. f=double(I1); %matlab不支持图像的无符号整形的计算
  9. g=fft2(f); %傅里叶变换
  10. g=fftshift(g); %平移至中心
  11. [N1,N2]=size(g); %取得对象g的行数和列数
  12. d0=68; %改变d0的值,可以观察到滤波的不同效果
  13. n1=fix(N1/2); %fix为取整,取接近0的整数
  14. n2=fix(N2/2);
  15. % 理想滤波器处理傅里叶图
  16. for i=1:N1
  17. for j=1:N2
  18. d=sqrt((i-n1)^2+(j-n2)^2);
  19. if d<=d0
  20. h=1;
  21. else
  22. h=0;
  23. end %计算理想低通滤波响应函数
  24. result(i,j)=h*g(i,j);
  25. end
  26. end
  27. subplot(232);
  28. imshow(log(abs(result)+1),[0,10]); %显示傅里叶图对应的滤波器通过部分
  29. xlabel('傅里叶频谱');
  30. result=ifftshift(result);
  31. x2=ifft2(result);
  32. x3=uint8(real(x2)); %real为取实部
  33. subplot(233);
  34. imshow(x3);
  35. xlabel('理想低通');
  36. % 2阶巴特沃斯滤波器处理傅里叶图
  37. n=2; %n为巴特沃斯阶数,此处取2
  38. for i=1:N1
  39. for j=1:N2
  40. d=sqrt((i-n1)^2+(j-n2)^2);
  41. h=1/(1+(d/d0)^(2*n));
  42. result(i,j)=h*g(i,j);
  43. end
  44. end
  45. subplot(234);
  46. imshow(log(abs(result)+1),[0,10]); %显示傅里叶图对应的滤波器通过部分
  47. xlabel('傅里叶频谱');
  48. result=ifftshift(result);
  49. x2=ifft2(result);
  50. x3=uint8(real(x2)); %real为取实部
  51. subplot(235);
  52. imshow(x3);
  53. xlabel('巴特沃斯低通');

结果:

在这里插入图片描述


本文转载自: https://blog.csdn.net/m0_53163870/article/details/124846893
版权归原作者 Thorn玫瑰 所有, 如有侵权,请联系我们删除。

“图像处理操作”的评论:

还没有评论