图像处理之基础---仿射变换
幾種典型的仿射變換:
public static AffineTransform getTranslateInstance(doubl
仿射變換-例
e tx, double ty)
平移變換,將每一點移動到(x+tx, y+ty),變換矩陣為:
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
(譯注:平移變換是一種“剛體變換”,rigid-body transformation,中學學過的物理,都知道啥叫“剛體”吧,就是不會產生形變的理想物體,平移當然不會改變二維圖形的形狀。同理,下面的“旋轉變換”也是剛體變換,而“縮放”、“錯切”都是會改變圖形形狀的。)
public static AffineTransform getScaleInstance(double sx, double sy)
縮放變換,將每一點的橫坐標放大(縮小)至sx倍,縱坐標放大(縮小)至sy倍,變換矩陣為:
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
當sx=sy時,稱為尺度縮放,sx不等于sy時,這就是我們平時所說的拉伸變換。
public static AffineTransform getShearInstance(double shx, double shy)
剪切變換,變換矩陣為:
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]
相當于一個橫向剪切與一個縱向剪切的復合
[ 1 0 0 ][ 1 shx 0 ]
[ shy 1 0 ][ 0 1 0 ]
[ 0 0 1 ][ 0 0 1 ]
(譯注:“剪切變換”又稱“錯切變換”,指的是類似于四邊形不穩定性那種性質,街邊小商店那種鐵拉門都見過吧?想象一下上面鐵條構成的菱形拉動的過程,那就是“錯切”的過程。)
public static AffineTransform getRotateInstance(double theta)
| 典型的仿射變換-平移變換 | 典型的仿射變換-縮放變換 |
| 典型的仿射變換-剪切變換 | 典型的仿射變換-旋轉變換 |
| 典型的仿射變換-旋轉變換 | ? |
編輯本段相關例子
旋轉變換1,目標圖形圍繞原點逆時針旋轉theta弧度,變換矩陣為:
[ cos(theta) -sin(theta) 0 ]
[ sin(theta) cos(theta) 0 ]
[ 0 0 1 ]
public static AffineTransform getRotateInstance(double theta, double x, double y)
旋轉變換2,目標圖形以(x, y)為軸心逆時針旋轉theta弧度,變換矩陣為:
[ cos(theta) -sin(theta) x-x*cos+y*sin]
[ sin(theta) cos(theta) y-x*sin-y*cos ]
[ 0 0 1 ]
相當于兩次平移變換與一次原點旋轉變換的復合:
[1 0 x][cos(theta) -sin(theta) 0][1 0- x]
[0 1 y][sin(theta) cos(theta) 0][0 1 -y]
[0 0 1 ][ 0 0 1 ][0 0 1]
這里是以空間任一點為圓心旋轉的情況。
http://blog.csdn.net/carina197834/article/details/8090467
轉載于:https://www.cnblogs.com/pengkunfan/p/3947125.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的图像处理之基础---仿射变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 链表+优先级
- 下一篇: android自动化测试工具之monke