没有合适的资源?快使用搜索试试~ 我知道了~
首页数字图像处理第二版MatLab代码大全
数字图像处理第二版MatLab代码大全
需积分: 18 268 浏览量
更新于2023-05-30
评论 3
收藏 934KB PDF 举报
数字图像处理MatLab,第二版,图像处理代码大全,应用于MATLAB编程使用,共有11章源代码
资源详情
资源评论
资源推荐

8
第2章 图像获取
2.3.2 二维连续傅里叶变换
例2.2
figure(1); %建立图形窗口 1
[u,v] = meshgrid(-1:0.01:1); %生成二维频域网格
F1 = abs(sinc(u.*pi));
F2 = abs(sinc(v.*pi));
F=F1.*F2; %计算幅度频谱 F=|F(u,v)|
surf(u,v,F); %显示幅度频谱,如图 2.3(b)
shading interp; %平滑三维曲面上的小格
axis off; %关闭坐标系
figure(2); %建立图形窗口 2
F1=histeq(F); %扩展 F 的对比度以增强视觉效果
imshow(F1); %用图像来显示幅度频谱,如图 2.3(c)
第3章 图像变换
3.4.4 二维 FFT 的 MATLAB 实现
例3.2 简单图像及其傅里叶变换
MATLAB程序:
%建立简单图像d并显示之
d = zeros(32,32); %图像大小3232
d(13:20,13:20) = 1; %中心白色方块大小为88
figure(1); %建立图形窗口1
imshow(d,'notruesize'); %显示图像d如图3.5(a)所示
%计算傅里叶变换并显示之
D = fft2(d); %计算图像d的傅里叶变换,fft2(d) = fft(fft(d).').'
figure(2); %建立图形窗口2
imshow(abs(D),[-1 5],'notruesize'); %显示图像 d 的傅里叶变换谱如 3.5(b)所示
例3.3 MATLAB图像及其傅里叶变换谱
MATLAB程序:
figure(1);
load imdemos saturn2; %装入MATLAB图像saturn2
imshow(saturn2); %显示图像saturn2如图3.6(a)所示
figure(2);
S= fftshift(fft2(saturn2)); %计算傅里叶变换并移位
imshow(log(abs(S)),[ ]); %显示傅里叶变换谱如3.6(b)所示
例3.4 真彩图像及其傅里叶变换谱
MATLAB程序:
figure(1);
A=imread('image1.jpg'); %装入真彩图像,见图1.1(b)
B=rgb2gray(A); %将真彩图像转换为灰度图像

9
imshow(B); %显示灰度图像如图3.7(a)所示
C=fftshift(fft2(B)); %计算傅里叶变换并移位
figure(2);
imshow(log(abs(C)),[ ]); %显示傅里叶变换谱如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); %显示灰度图像如图 3.10(a)所示
DCT=dct2(GRAY); %进行余弦变换
figure(3);
imshow(log(abs(DCT)),[ ]); %显示余弦变换如图 3.10(b)所示。
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)
例 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)’); %显示图像标题
)'(xR

10
xlabel(‘\theta (degrees)’); %显示 x 坐标
“
)egrees(d
”
ylabel(‘X\prime’); %显示 y 坐标
“
'x
”
set(gca,’Xtick’,0:20:180); %设置 x 坐标刻度
colormap(hot); %设置调色板
colorbar; %显示当前图像的调色板
第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);

11
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 直方图修正
例 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:直方图规定效果实例

12
用 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 图像间运算
例:用图像平均减少随机噪声
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
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:使用中值滤波降低图像噪声
I=imread('eight.tif');
J=imnoise(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 模板中值滤波
剩余54页未读,继续阅读













安全验证
文档复制为VIP权益,开通VIP直接复制

评论0