roo

programmer的人生才刚刚开始……

导航

图像处理(二)

 

    图像的几何运算

  1. 图像插值
    1. 最近邻插值(nearest
    2. 双线性插值(bilinear
    3. 双立方插值(bicubic
  2. 图像大小调整
    • B = imresize( A, m, method )
    • B = imresize( A, [mrows ncols], method )
    • B = imresize( A, m, method, n )
    • B = imresize( A, m, method, h )

    参数method的可选值为’nearest’、’bilinear’和’bicubic’;m为放大系数;n为滤波器的尺寸;h可以看做一愕二维FIR滤波器。

     

  3. 图像旋转
    • B = imrotate( A, angle, method )
    • B = imrotate( A, angle, method, crop ):把图像进行angle角度旋转,返回和A大小相同的中间部分。
  4. 图像剪裁
    • I2 = imcrop( I )
    • X2 = imcrop( X, map )
    • RGB2 = imcrop( RGB )

     

    图像的变换技术

  5. 二维傅立叶变换
    1. 傅立叶变换函数

    fft2

    二维fft变换矩阵

    fftn

    n维傅立叶变换

    fftshift

    将变换后图像频谱中心从矩阵的原点移到矩阵的中心

    ifft2

    计算图像的二维傅立叶反变换

    ifftn

    计算图像的n维傅立叶反变换

    1. 实现

    figure(1);

    load imdemos saturn;

    figure(2);

    B = fftshift(fft(saturn2));

    %显示变换后的系数分布

    imshow(log(abs(B)),[]),colormap(jet(64)),colorbar;

     

    1. 滤波器频率响应

    利用傅立叶变换可以得到线性滤波器的频率响应,其过程如下:首先求出滤波器的脉冲响应,然后利用快速傅立叶变换算法对滤波器的脉冲响应进行变换,得到的结果就是线性滤波器的频率响应。

    %高斯滤波器的频率响应

    h = fspecial( 'gaussian' );

    freqz2(h)

     

    1. 快速卷积

    假设A是一个M×N的矩阵,B是一个P×Q的矩阵,则快速计算矩阵的方法如下:

    • AB进行零填充,将AB填充为2的幂次矩阵;
    • 使用fft计算AB的二维DFT(离散傅立叶变换);
    • 将两个DFT计算结果相乘;
    • 使用ifft2计算上一步所得的二维DFT的反变换。

     

    A = magic(3);

    B = magic(3);

    A(8,8) = 0;

    B(8,8) = 0;

    C = ifft2(fft2(A).*fft2(B));

    C = C(1:5,1:5);

    C = real( C );

     

    1. 图像特征识别

    对图像进行傅立叶变换后,利用快速卷积的方法计算两张图像飞卷积,提取结果的峰值。

     

  6. 离散余弦变换
    1. 离散余弦变换的定义
    2. DCT变换函数

    dct2

    实现图像的二维离散余弦变换

    idct2

    实现图像的二维离散余弦反变换

    dctmtx

    用于计算二维离散余弦变换矩阵

     

    1. 实现

    RGB = imread('autumn.tif');

    figure(1)

    imshow(RGB)

    %转换为灰度图

    I= rgb2gray(RGB);

    figure(2);

    imshow(I);

    %进行余弦变换

    J = dct2(I);

    figure(3);

    imshow(log(abs(J)),[]);

    colormap(jet(64));

    colorbar;

    J(abs(J)<11) = 0;

    %进行余弦反变换

    K = idct2(J)/255;

    figure(4);

    imshow(K)

     

    1. 应用

    I = imread('cameraman.tif');

    I = im2double(I);

    %产生二维DCT变换矩阵

    T = dctmtx(8);

    %计算二维DCT

    B = blkproc(I,[8 8],'P1*x*P2',T,T');

    %二值掩码,用来压缩DCT系数

    mask = [1 1 1 1 0 0 0 0

    1 1 1 0 0 0 0 0

    1 1 0 0 0 0 0 0

    1 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0];

    %只保留DCT变换的11个系数

    B2 = blkproc(B,[8 8],'P1.*x',mask);

    %DCT反变换,用来重构图像

    I2 = blkproc(B2,[8 8],'P1*x*P2',T',T);

    subplot(1,2,1)

    imshow(I);

    subplot(1,2,2)

    imshow(I2)

     

  7. 其他变换技术
    1. 离散沃尔什(Walsh)变换

    它只包括+1-1两个数值所构成的完备正交集。与傅立叶变换相比,Walsh变换减少了存储空间和提高了运算速度。

    1. 离散哈达玛(Hadamard)变换

    特殊的Walsh变换,各行各列之间彼此正交。它的最大优点在于它的变换核矩阵具有简单的递推关系,即高阶矩阵可以用两个低阶矩阵求得。

    1. Radon变换

    是计算图像在某一角度射线方向上投影的变换方法。

     

    图像分析

  8. 像素值及其统计
    • 选定像素的数据值(pixval函数和impixel函数)
    • 沿图像中某个路径的数据值(improfile函数)
    • 图像数据的轮廓图(imcontour函数)
    • 图像数据的柱状图(imhist函数)
    • 图像数据的摘要统计值(mean2函数、std2函数和coor2函数)
    • 图像区域的特征度量(imfeature函数)
  9. 图像分析
    • 灰度图像的边缘:edge函数
    • 行四叉树分解:qtdecomp函数
    • 获取四叉树分解块值:qtdgetblk函数
    • 设置四叉树分解块值:qtdsetblk函数

    实例:灰度边缘检测实例

    RGB=imread('peppers.png');

    isrgb(RGB);

    figure(1);

    imshow(RGB);

    I=rgb2gray(RGB);

    figure(2);

    imshow(I),colobar('horiz');

    isgray(I);

    ED=edge(I,'sobel',0.08);

    figure(3);

    imshow(ED);

     

  10. 图像调整
    1. 灰度调整(imadjust函数)
    2. 直方图调整(histeq函数)
  11. 图像平滑
  12. 图像平滑的主要目的是减少图像噪音。在空间域进行时,基本方法就是求像素的平均值或中值;在频域中则运用低通滤波技术。

    1. 线性滤波

    I=imread('eight.tif');

    imshow(I)

    J=imnoise(I,'salt&pepper',0.02);

    figure,imshow(J)

    %进行中值滤波

    L=medfilt2(J,[3 3]);

    figure,imshow(L);

     

    1. 中值滤波

     

    1. 自适应滤波

    RGB=imread('saturn.png');

    I=rgb2gray(RGB);

    J=imnoise(I,'gaussian',0,0.005);

    %采用自适应滤波

    K=wiener2(J,[5 5]);

    figure,imshow(I);

    figure,imshow(J);

    figure,imshow(K);

     

    特殊区域处理

  13. 区域指定
    1. 多边形选择

    I = imread('eight.tif');

    %指定六边形的角点

    c = [222 272 300 272 222 194];

    r = [21 21 75 121 121 75];

    %生成对应的二值掩模图像

    BW = roipoly(I, c, r);

    figure,imshow(I);

    figure,imshow(BW);

     

    1. 其他选择

    I = imread('coins.png');

    %选择灰度范围在128255之间的像素

    BW = roicolor(I,128,255);

    figure,imshow(I);

    figure,imshow(BW);

    1.  
  14. 特定区域滤波
  15. I = imread('pout.tif');

    imshow(I);

    %交互式选择区域

    BW = roipoly

    %定义滤波器

    h = fspecial('unsharp');

    %进行区域滤波

    I2 = roifilt2(h,I,BW);

    figure,imshow(I2);

     

  16. 特定区域填充
  17. load trees

    I=ind2gray(X,map);

    imshow(I);

    %指定特定区域,并进行填充

    I2=roifill;

    imshow(I2); 

     

     

posted on 2007-06-09 14:32  roo  阅读(2135)  评论(0)    收藏  举报