第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);              %图像大小32 32
d(13:20,13:20) = 1;            %中心白方块大小为8 8
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);              %将真彩图像转换为灰度图像
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轴分别为thetaxp
title(‘R_{\theta} (X\prime)’);    %显示图像标题
xlabel(‘\theta (degrees)’);      %显示x坐标
ylabel(‘X\prime’);            %显示y坐标
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的程序如下:
matlab直方图
I=imread('007.bmp');
figure;imshow(I);
I=double(I)
[M,N]=size(I);
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函数实现直方图均衡化的程序如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。