多语言展示
当前在线:1574今日阅读:91今日分享:37

基于Mathematica的图像仿射变换实现过程

本文,学习一下,在Mathematica里面,图像是怎么执行仿射变换的。并在文末,提出我的疑问。
工具/原料
1

电脑

2

Mathematica

方法/步骤
1

给出下面的图像。它的尺寸是333*500。

2

标注出猫眼和猫嘴的坐标:{112, 339},{222, 332},{161, 261}

3

本文一个没能够实现的目标:把猫的眼和嘴的坐标,变成{100, 300}, {260, 360}, {160, 200},并一一对应。这个变换方法,可以通过仿射变换确定:M*原图=新图M是仿射变换矩阵,可以通过下式实现。M=c.Inverse[b]

4

把M作用于原图,得到新图f:f=ImageForwardTransformation[a, (M.{#[[1]], #[[2]], 1})[[;; 2]] &,  PlotRange -> All, Background -> Green]

5

尝试着在新图中,标注出{100, 300}, {260, 360}, {160, 200},看看是不是猫眼和嘴巴的位置。HighlightImage[f, {RGBColor[0, 0.36, 0],   Point[{{100, 300}, {260, 360}, {160, 200}}]}]结果,令人失望,存在严重的偏离。

6

仿射变换,还可以用另一种方法实现:h=ImagePerspectiveTransformation[a, M, PlotRange -> All,  Background -> Green, Masking -> All]

7

HighlightImage[h, {RGBColor[0, 0.36, 0],   Point[{{100, 300}, {260, 360}, {160, 200}}]}]偏移现象似乎更严重了!

注意事项

怎么处理坐标偏移问题?

推荐信息