本文,学习一下,在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}}]}]偏移现象似乎更严重了!
注意事项
怎么处理坐标偏移问题?
上一篇:教你几招瞬间降低油耗
下一篇:再次分享5个Excel操作技巧