zoukankan      html  css  js  c++  java
  • 数字图像处理-图像的几何变换

    1.相关概念

      内容相同的两幅图像可能由于成像角度、透视关系以及镜头自身原因等造成几何失真导致不同的外观,这样会给人或图像识别程序带来不便或困扰。通过适当的几何变换(例如旋转)可以在很大程度上消除几何失真的影响,让图像处理和识别集中于图像内容本身或者说图像中的对象,而不是该对象的角度和位置等。几何变换(也叫空间变换)通常作为其他图像处理中的预处理步骤,是图像归一化的核心工作之一。

      图像几何变换又称为图像空间变换,它将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置几何变换并不改变图像的像素值,只是在图像平面上进行像素的重新安排主要包括2部分运算:①空间变换,如平移、旋转、镜像等,用它来表示输出图像与输入图像之间的像素映射关系;②灰度插值,因为空间变换后输出图像的像素可能被映射到输入图像的非整数坐标。

      

     

     

       注意:当图像归一化用于消除几何因素(视角、方位等)造成的图像外观变化时,它被称为图像几何归一化,它能排除对象间几何关系的差别,找出图像中那些几何不变量,从而得知这些对象原本就是一样或属于相同类别。

    2.图像平移

       图像平移就是将图像中所有的点按照指定的平移量水平或者垂直移动。公式:

     

     

    A=imread('pout.tif');
    % strel是创建形态学结构元素
    % translate(SE, [y x])在结构元素SE上进行y和x方向的位移 正数对应右移和下移
    se=translate(strel(1), [80 50]);
    % 形态学膨胀
    B=imdilate(A,se);
    figure;
    subplot(1,2,1), subimage(A);
    title('原图');
    subplot(1,2,2), subimage(B);
    title('平移后');
    

    init = imread('Fig3.tif'); % 读取图像
    [R, C] = size(init); % 获取图像大小 Row, Col
    res = zeros(R, C); % 构造结果矩阵。每个像素点默认初始化为0(黑色)
    delX = 50; % 平移量X
    delY = 50; % 平移量Y
    tras = [1 0 delX; 0 1 delY; 0 0 1]; % 平移的变换矩阵 
    
    for i = 1 : R
        for j = 1 : C
            temp = [i; j; 1];
            temp = tras * temp; % 矩阵乘法
            x = temp(1, 1);
            y = temp(2, 1);
            % 变换后的位置判断是否越界
            if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
                res(x, y) = init(i, j);
            end
        end
    end;
    
    imshow(uint8(res)); % 显示图像
    

    3.图像镜像

      镜像变换又分为水平镜像垂直镜像。

     

     

    A=imread('pout.tif');
    [height,width,dim]=size(A);
    tform=maketform('affine',[-1 0 0;0 1 0;width 0 1]);
    B=imtransform(A,tform,'nearest');
    
    tform2=maketform('affine',[1 0 0;0 -1 0;0 height 1]);
    C=imtransform(A,tform2,'nearest');
    
    subplot(1,3,1);imshow(A);
    title('Source');
    subplot(1,3,2);imshow(B);
    title('Horizon');
    subplot(1,3,3);imshow(C);
    title('Vertical');

    4.图像转置

      图像转置是指将图像像素的x坐标和y坐标呼唤,图像大小随之改变:高度和宽度互换。

     

    A=imread('pout.tif');
    tform=maketform('affine', [0 1 0;1 0 0;0 0 1]);
    B=imtransform(A,tform,'nearest');
    % B=A'; % 直接这样也是OK的,就是矩阵转置 subplot(
    1,2,1),imshow(A);title('Source Image'); subplot(1,2,2),imshow(B);title('Transpose Image');

     5.图像缩放

      图像大小按照指定比率放大或者缩小。

     

     

    A=imread('pout.tif');
    B=imresize(A,1.2,'nearest');% zoom in 1.2
    C=imresize(A,0.8,'nearest');% zoom out 0.8
    figure;
    imshow(A);title('Source');
    figure;
    imshow(B);title('Zoom in 1.2');
    figure;
    imshow(C);title('Zoom out 0.8');

     

     6.图像旋转

      将图像围绕某一点旋转一定角度。旋转通常也会改变图像的大小,和平移的处理一样,可以把转出显示区域之外的图像丢弃,也可以改变输出图像的大小以扩展显示范围。

    以原点为中心旋转:

     

     

     以任意点为中心的旋转可以将平移和旋转结合实现,先进行坐标系平移,再以新的坐标原点为中心旋转,然后将新的原点平移回原坐标系的原点。分3步实现:

     

     

    A=imread('pout.tif');
    B=imrotate(A,30,'nearest','crop'); % Rotate 30 degrees counterclockwise
    subplot(1,2,1),imshow(A);title('Source Image');
    subplot(1,2,2),imshow(B);title('Rotated 30 Degrees');

  • 相关阅读:
    Beyond Compare3 注册密钥和添加到右键菜单
    DLL文件无法删除怎么解决
    英语单词学习方法
    JSP+Servlet+JavaBean
    把Java程序打包成jar文件包并执行
    把java文件打包成.jar (jar命令详解)
    Java程序打包成jar包
    JDK
    使用JDK开发Servlet程序
    Jdk和Jre目录和三个lib目录说明----外部扩展jar包servlet,mysql,oracle等
  • 原文地址:https://www.cnblogs.com/djh5520/p/13704377.html
Copyright © 2011-2022 走看看