数字图像处理第二版MatLab代码大全
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:用图像平均减少随机噪声 I=imread('tire.tif'); [M,N]=size(I); II1=zeros(M,N); for i=1:16 II(:,:,i)=imnoise(I,'gaussian',0,0.01); II1=II1+double(II(:,:,i)); if or(or(i==1,i==4),or(i==8,i==16)); figure; imshow(uint8(II1/i)); end end
10
for i=1:M for j=1:N if I(i,j)<=50 I(i,j)=40; elseif I(i,j)<=180 I(i,j)=220; else I(i,j)=40; end end end I=uint8(I); figure;imshow(I); 例 4.4 具体 Matlab 程序如下: I=imread('lena.bmp'); imshow(I); I=double(I); [M,N]=size(I); for k=1:8 J=zeros(M,N); for i=1:M for j=1:N temp=I(i,j); s1=0;s2=0; range=[k:-1:1]; for d=range s1=2^(8-d)+s1;s2=2^(8-d+1); if temp>=s1 & temp<s2; J(i,j)=255; break; end end end end J=uint8(J); figure;imshow(J); end 4.2.2 直方图修正
MATLAB程序: %建立简单图像d并显示之 d = zeros(32,32); d(13:20,13:20) = 1; figure(1); imshow(d,'notruesize'); %计算傅里叶变换并显示之 D = fft2(d); figure(2);
图像变换
% 图像大小3232 %中心白色方块大小为88 % 建立图形窗口1 %显示图像d如图3.5(a)所示 %计算图像d的傅里叶变换,fft2(d) = fft(fft(d).').' % 建立图形窗口2
11
用 matlab 中的 histeq 函数实现直方图均衡化的程序如下: I=imread('circuit.tif'); [M,N]=size(I); for i=1:8:257 counts(i)= i; end Q=imread('circuit.tif'); N=histeq(Q,counts); figure subplot(221);imshow(N); subplot(222);imhist(N); axis([0 260 0 5000]); 4.2.3 图像间运算
imshow(abs(D),[-1 5],'notruesize'); %显示图像 d 的傅里叶变换谱如 3.5(b)所示 例3.3 MATLAB图像及其傅里叶变换谱 MATLAB程序: figure(1); load imdemos saturn2; imshow(saturn2); figure(2); S= fftshift(fft2(saturn2)); imshow(log(abs(S)),[ ]);
例 4.6 直方图均衡化效果实例 用 Matlab 中的 histeq 函数实现直方图均衡化的程序如下: I=imread('circuit.tif'); figure subplot(221);imshow(I); subplot(222);imhist(I) I1=histeq(I); figure; subplot(221);imshow(I1) subplot(222);imhist(I1) 例 4.8:直方图规定效果实例
8
imshow(B); C=fftshift(fft2(B)); figure(2); imshow(log(abs(C)),[ ]);
% 显示灰度图像如图3.7(a)所示 % 计算傅里叶变换并移位 % 显示傅里叶变换谱如3.7(b)所示
3.5.4 离散余弦变换的 MATLAB 实现
例3.5 计算并显示真彩图像余弦变换的MATLAB程序如下: RGB=imread('image2.jpg'); figure(1); imshow(RGB); GRAY=rgb2gray(RGB); figure(2); imshow(GRAY); DCT=dct2(GRAY); figure(3); imshow(log(abs(DCT)),[ ]); %装入真彩图像 % 显示彩色图像 %将真彩图像转换为灰度图像 % 显示灰度图像如图 3.10(a)所示 %进行余弦变换 %显示余弦变换如图 3.10(b)所示。
4.3
空域滤波增强
Matlab 实现的邻域平均法抑制噪声的程序: I=imread('eight.tif'); J=imnoise(I,'salt & pepper', 0.02); subplot(231),imshow(I);title('原图像'); subplot(232),imshow(J);title('添加椒盐噪声图像') k1=filter2(fspecial('average',3),J); %进行 3×3 模板平滑滤波 k2=filter2(fspecial('average',5),J); %进行 5×5 模板平滑滤波 k3=filter2(fspecial('average',7),J); %进行 7×7 模板平滑滤波 k4=filter2(fspecial('average',9),J); %进行 9×9 模板平滑滤波 subplot(233),imshow(uint8(k1));title('3×3 模板平滑滤波'); subplot(234),imshow(uint8(k2));title('5×5 模板平滑滤波'); subplot(235),imshow(uint8(k3));title('7×7 模板平滑滤波'); subplot(236),imshow(uint8(k4));title('9×9 模板平滑滤波') 例 4.10:使用中值滤波降低图像噪声
3.8.2 Radon 变换的 MATLAB 实现 例 3.8 真彩图像的 Radon 变换 MATLAB 程序如下: RGB=imread('image2.jpg'); %装入真彩图像 GRAY=rgb2gray(RGB); %将真彩图像转换为灰度图像 figure(2); imshow(GRAY); %显示灰度图像如图 3.16(a) [R,xp] = radon(GRAY,[0 45]); %计算变换角度为 0° 和 45° 的 Radon 变换 figure; plot(xp,R(:,1)); title('R_{0^o} (x\prime)') %显示 0° 方向上的 Radon 变换如图 3.16(b) figure; plot(xp,R(:,2)); title('R_{45^o} (x\prime)') %显示 45° 方向上的 Radon 变换如图 3.16(c)
“ ”
第4章
4.2.1 直接灰度变换 Matlab 程序实现图像求反: I = imread(' cameraman.tif'); imshow(I) I=double(I) I=256-1-I I=uint8(I) figure imshow(I)
图像增强
例 4.1 用 Matlab 程序实现线性灰度变换的图像增强: %读入并显示原始图像 I = imread('pout.tif'); imshow(I); I=double(I); [M,N]=size(I); %进行线性灰度变换 for i=1:M for j=1:N if I(i,j)<=30 I(i,j)=I(i,j); elseif I(i,j)<=150 I(i,j)=(200-30)/(150-30)*(I(i,j)-30)+30; else I(i,j)=(255-200)/(255-150)*(I(i,j)-150)+200; end end end 例 4.2 I=imread('lena.bmp'); figure;imshow(I); I=double(I); I2=41*log(1+I); I2=uint8(I2); figure;imshow(I2); 例 4.3 灰度切割变换的 Matlab 的程序如下: I=imread('007.bmp'); figure;imshow(I); I=double(I) [M,N]=size(I);
例 3.9 连续角度的 Radon 变换
对于一组连续角度的 Radon 变换通常用一幅图像来表示。本例先建立一幅简单图像, 然后令变换角度从 0° 以 1° 的增量变化到 180° 时的 Radon 变换情况。 其 MATLAB 程序如下: I = zeros(100,100); %建立简单图像如图 3.17(a) I(25:75, 25:75) = 1; figure(1);imshow(I); theta = 0:180; %规定变换角度的范围 [R,xp] = radon(I,theta); %计算 Radon 变换 figure(2); imagesc(theta,xp,R); %以图像方式显示变换结果 R, %其 x 轴和 y 轴分别为 theta 和 xp title(‘R_{\theta} (X\prime)’); %显示图像标题 R ( x' )
12
k3=medfilt2(J,[7 7]); %进行 7×7 模板中值滤波 k4=medfilt2(J,[9 9]); %进行 9×9 模板中值滤波 subplot(233),imshow(k1);title('3×3 模板中值滤波') subplot(234),imshow(k2);title('5×5 模板中值滤波') subplot(235),imshow(k3);title('7×7 模板中值滤波') subplot(236),imshow(k4);title('9×9 模板中值滤波')
第2章
2.3.2 二维连续傅里叶变换
例2.2 figure(1); [u,v] = meshgrid(-1:0.01:1); F1 = abs(sinc(u.*pi)); F2 = abs(sinc(v.*pi)); F=F1.*F2; surf(u,v,F); shading interp; axis off; figure(2); F1=histeq(F); imshow(F1);
图像获取
%建立图形窗口 1 %生成二维频域网格
%计算幅度频谱 F=|F(u,v)| %显示幅度频谱,如图 2.3(b) %平滑三维曲面上的小格 %关闭坐标系 %建立图形窗口 2 %扩展 F 的对比度以增强视觉效果 %用图像来显示幅度频谱,如图 2.3(c)
第3章
3.4.4 二维 FFT 的 MATLAB 实现 例3.2 简单图像及其傅里叶变换
%装入MATLAB图像saturn2 %显示图像saturn2如图3.6(a)所示 %计算傅里叶变换并移位 %显示傅里叶变换谱如3.6(b)所示
例3.4 真彩图像及其傅里叶变换谱 MATLAB程序: figure(1); A=imread('image1.jpg'); B=rgb2gray(A);
%装入真彩图像,见图1.1(b) %将真彩图像转换为灰度图像
9
xlabel(‘\theta (degrees)’); ylabel(‘X\prime’); set(gca,’Xtick’,0:20:180); colormap(hot); colorbar;
“ )” %显示 x 坐标 (degrees
%显示 y 坐标 x' %设置 x 坐标刻度 %设置调色板 %显示当前图像的调色板
I=imread('eight.tif'); J=imnBaidu Nhomakorabeaise(I,'salt & pepper', 0.02); subplot(231),imshow(I);title('原图像'); subplot(232),imshow(J);title('添加椒盐噪声图像') k1=medfilt2(J); % 进行 3×3 模板中值滤波 k2=medfilt2(J,[5 5]); %进行 5×5 模板中值滤波