图像的几何变换1

图像的几何变换又称为图像空间变换,它将一幅图像中的坐标位置映射到另一幅图像中的新生位置。几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。

一个几何变换需要两部分运算,首先是空间变换所需的运算,如平移、旋转、镜像等,需要用它来表示输出图像和输入图像之间的像素映射关系;此外,还需要灰度差值算法,因为这种变换关系进行计算出的输出图像的像素很可能被映射到非整数坐标上

图像平移

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

变换公式:设(x0,y0)为原图像上的一点,图像水平平移量为Tx,垂直平移量为Ty,则平移后的点坐标(x1,y1)变为 x1=x0-Tx; y1=y0-Ty

matlab实现:

>> A=imread('test.bmp');
>> se=translate(strel(1),[80,50]);
>> B=imdilate(A,se);
>> subplot(1,2,1),imshow(A);
>> subplot(1,2,2),imshow(B);
平移变换效果

图像镜像

镜像变换分为水平镜像和竖直镜像。水平镜像即为图像左半部分和右半部分以图像竖直中心线为中心轴进行对换;而竖直镜像则是将图像上半部分和下半部分以图像水平中轴线进行对换。

matlab实现:
matlab中的imtransform()函数用于完成一般的二维空间变换,形式如下,

B=imtransform(A,TFORM,method)
  • 参数A为要进行几何变换的图像;
  • 空间变换结构TFORM指定了具体的变换类型;
  • 可选参数method允许为imtransform()函数选择的插值方法;
合法值 含义
‘bicubic’ 三次插值
‘bilinear’ 双线性插值
‘nearest’ 最近邻插值
  • 一般默认为双线性插值;

对于TFORM结构,可以使用maketform()函数和cp2tform()函数来进行创建。cp2tform函数是一个数据拟合函数,需要原图像和目标图像之间对应的点对儿作为输入,用于确定基于控制点对儿的集合变换关系,这里先仅介绍使用maketform()函数获得TFORM结构的方法。

T=maketform(transformtype,Matrix);
  • 参数transformtype指定了变换的类型,如常见的‘affine’为二维火多维仿射变换,包括平移、旋转、比例、拉伸、错切等;
  • Matrix为相应的仿射变换矩阵。

示例:镜像变换

>> A=imread('test.bmp');
>> [height.width.dim]=size(A);
>> [height,width,dim]=size(A);
>> tform=maketform('affine',[-1 0 0;0 1 0;width 0 1]);
>> %定义水平镜像变换矩阵
>> B=imtransform(A,tform,'nearest');
>> imshow(B)
>> tform2=maketform('affine',[1 0 0;0 -1 0;0 height 1]);
>> C=imtransform(A,tform2,'nearest');
>> subplot(1,3,1),imshow(A);
>> subplot(1,3,2),imshow(B);
>> subplot(1,3,3),imshow(C);
镜像变换效果图

图像转置

图像的转置是将图像的x坐标与图像的y坐标进行互换,图像的大小会随之改变——高度和宽度将会互换。

matlab实现:

>> %图像转置
>> A=imread('test.bmp');
>> tform=maketform('affine',[0 1 0;1 0 0;0 0 1]);
>> %定义转置矩阵
>> B=imtransform(A,tform,'nearest');
>> subplot(1,2,1),imshow(A);
>> subplot(1,2,2),imshow(B);
示例结果

图像缩放

图像缩放是指图像大小按照指定的比率进行放大或者缩小。假设图像x轴方向的缩放比率是Sx,y轴方向的缩放比率是Sy,直接根据缩放公式计算得到的目标图像中,有些映射原坐标可能不是整数,从而找不到对应的像素位置。例如,当Sx=Sy=2时,图像放大两倍,放大图像中像素(0,1)就对应着原图像中的(0,0.5),并不是整数坐标位置,因此也无法提取其灰度值。

这里就必须进行某种近似处理,一种简单的策略就是直接将它最邻近的整数坐标位置(0,0)或者(0,1)的像素值赋给它,这就是所谓的最近邻插值。

matlab实现:
matlab中仍可以用之前的imtransform()函数进行实现,如下,

>> A=imread('test.bmp');
>> tform=maketform('affine',[0.5 0 0;0 0.5 0; 0 0 1]);   %定义相应的缩放变换矩阵
>> B=imtransform(A,tform,'nearest');
>> subplot(1,2,1),imshow(A);
>> subplot(1,2,2),imshow(B);
>> imshow(A);
>> figure
>> imshow(B);
使用imtransform缩放0.5倍

matlab中还有专门的图像缩放函数imresize(),调用形式如下,

B=imresize(A,Scale,method);
  • 参数A为要进行缩放的原始图像;
  • Scale为缩放比例;
  • method为插值方法,默认为最近邻插值,合法取值同imtransform()函数。

示例:

>> A=imread('test.bmp');
>> B=imresize(A,0.5,'nearest');
>> figure,imshow(A),title('原图像');
>> figure,imshow(B),title('缩放0.5倍后的图像');
使用imresize缩放0.5倍

图像旋转

图像旋转一般是指将图像围绕某一指定点旋转一定的角度。旋转的时候通常也会改变图像的大小,可以采用和图像平移相同的策略,即转出显示区域的图像进行截去,也可以改变输出图像的大小从而扩展显示范围。

假设点P(x0,y0)绕原点逆时针旋转角度θ到点P1(x1,y1)。令L=|OP|=√x²+y²,则有:sinα=y0/L,cosα=x0/L,到达P1点后,则有:sin(α+θ)=y1/L=cosαsinθ+sinαcosθ,cos(α+θ)=x1/L=cosθcoxα-sinθsinα

则,令L=1,则cosα=x0,sinα=y0,于是有,
x1=cosθx0-sinθy0,y1=cosθy0+sinθx0

tip:图像旋转变换的效果受具体插值方法影响比较明显,这里采用最邻近插值。

matlab实现:
matlab中有专门围绕图像中心的旋转变换函数imrotate(),调用方式如下,

B=imrotate(A,angle,method,'crop');
  • A是待处理图像;
  • angle为旋转角度,单位为度,若指定为一个正值,则按照逆时针旋转相应度数;
  • method为插值方法;
  • ‘crop’选项会裁剪旋转后增大的图像,使得到的图像与原图大小一致。

具体示例:

>> A=imread('test.bmp');
>> B=imrotate(A,60,'nearest');
>> C=imrotate(A,60,'nearest','crop');
>> figure,imshow(A),title('原图像');
>> figure,imshow(B),title('旋转60度后的图像');
>> figure,imshow(C),title('旋转60度后并裁剪的图像');
图像旋转效果
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容