数字图像处理与机器视觉-5-图像几何变换(1)

上一篇:  数字图像处理与机器视觉-4-直方图均衡化

首先明确一点,图像几何变换不改变像素的值。例如,平移,旋转,镜像等。但是也会遇到特殊情况 ,比如旋转角度不是90°的整数倍,会出现原图像素在新图中没有位置(映射后位置不为整数),这时候还需要用插值法来补充。

几何变换过程可以概括为:



其中x和y坐标映射关系分别为:

数字图像处理与机器视觉-5-图像几何变换(1)_第1张图片
假设原图为I,变换后的图为J,新图J中的点(x1,y1),算法大概原理是:

1.确定变换后新图J的尺寸(w,h);
2.通过逆变换求得新图中点(x1,y1)在原图中对应的点(x0,y0),需要注意的是,逆变换后的点坐标可能不是整数,需要通过插值转换成整数;
3.判断(x0,y0)是否在原图区域内,如果在,则将I(x0,y0)的像素值赋给J(x1,y1);不在则直接将J(x1,y1)赋为(0,0);

下面来见识下图像变换里最最基础的变换

图像平移

这个应该是几何变换中最简单了,不用考虑变换后像素点坐标不为整数的情况,变换函数为:

数字图像处理与机器视觉-5-图像几何变换(1)_第2张图片
矩阵变换:
数字图像处理与机器视觉-5-图像几何变换(1)_第3张图片
木有接触过 灰度形态学,书上的方法先不管了,有兴趣的可以敲下书上示例代码;

按照之前的变换算法,MATLAB实现如下:

function O = translate(I,x,y)
%translate image I 
%   Detailed explanation goes here

[m,n] = size(I);

O = zeros(m,n);

for i = 1 : m
    for j = 1 : n
        if i - x > 0 && i - x < m + 1 && j - y > 0 && j - y < n + 1
            O (i,j) = I(i - x, j - y);
%         else  %这里默认超过边界的像素为0,黑色
%             O (i,j) = 0;
%         end
    end
end

O = uint8(O);

end
上效果图:

数字图像处理与机器视觉-5-图像几何变换(1)_第4张图片
图像镜像

分为水平镜像和垂直镜像,话不多说,直接上矩阵表达式:

数字图像处理与机器视觉-5-图像几何变换(1)_第5张图片

数字图像处理与机器视觉-5-图像几何变换(1)_第6张图片

MATLAB实现:

imtransform 用于一般的二维空间变换

B = imtransform(A, TFORM,method);

TFORM是具体的变换类型, method是选择变换后用哪种插值方法

定义变换类型的函数为,T = maketform(transformtype,Matrix);

transformtype有如下几个选项(参见'maketform'函数用法)

'affine':在二维或n维仿射变换,什么是仿射变换,可以理解为线性变换+平移;变换前是直线的,变换后依然是直线,并且比例保持不变。参考 如何通俗的讲解仿射变换

'projective':在二维或n维投影变换;

'custom':用户自定义变换;

'box':每个维度的独立仿射变换(平移和缩放);

'composite':任意多个基本变换的组合;

效果图:

数字图像处理与机器视觉-5-图像几何变换(1)_第7张图片

总的来说,平移和镜像变换都比较简单,理解起来没有什么难度,就是要多熟悉下MATLAB函数和处理方法。


你可能感兴趣的:(图像处理,图像处理,机器视觉,图像变换,平移变换)