skimage库的transform.SimilarityTransform()用法

【时间】2019.09.04
【题目】skimage库的transform.SimilarityTransform()用法

一、SimilarityTransform(图像变换的一种:相似变换)

相似变换:等距变换+均匀尺度缩放,所谓等距变换就是平移+旋转变换。

变换矩阵:

skimage库的transform.SimilarityTransform()用法

变换效应:角度、平行性和垂直性不发生变换。

二、transform.SimilarityTransform()用法

参考:help(tf.SimilarityTransform)

输入参数:

  • matrix : (3, 3) array, optional , Homogeneous transformation matrix.

           可选,即上面所说的(3,3)齐次变换矩阵,具体看下面说明。

  • scale : float, optional(缩放因子,即s)
  • rotation : float, optional  Rotation angle in counter-clockwise direction as radians.

              (旋转角度θ,逆时针,以弧度表示角度)

  • translation : (tx, ty) as array, list or tuple, optional ,x, y translation parameters.

                   平移参数(tx, ty)

返回:

一个 skimage.transform._geometric.SimilarityTransform object 
(3,3)齐次变换矩阵:

      [[a0  b0  a1]
       [b0  a0  b1]
       [0   0    1]]
对比变换矩阵,可知:a0=s * cos(rotation),b0= s* sin(rotation),a1=tx,b1=ty.

这样最后的相似变换结果为:

 X = a0 * x - b0 * y + a1 =
   = s * x * cos(rotation) - s * y * sin(rotation) + a1

 Y = b0 * x + a0 * y + b1 =
   = s * x * sin(rotation) + s * y * cos(rotation) + b1


三、相关方法:

3.1 estimate(self, src, dst):从一组对应点(源点,目标点)估计变换矩阵
输入参数: 
 |      src : (N, 2) array
 |          Source coordinates.(源点坐标)
 |      dst : (N, 2) array
 |          Destination coordinates.(目标点坐标)
 返回:
 |      success : bool
 |          True, if model estimation succeeds.


3.2  inverse(self, coords) :从目标坐标逆推源坐标
 |      Apply inverse transformation.
输入参数:    

 |      coords : (N, 2) array
 |          Destination coordinates.(目标坐标)
返回: 
 |      coords : (N, 2) array
 |          Source coordinates.

3.3 residuals(self, src, dst):确定转换后的目标坐标的残差,确定每个源坐标到各个目标坐标的欧几里德距离。
输入参数:
 |      src : (N, 2) array
 |          Source coordinates.
 |      dst : (N, 2) array
 |          Destination coordinates.
返回:
 |      residuals : (N, ) array
 |          Residual for coordinate.
 |  

4、例子

4.1

from skimage import transform as trans
import numpy as np
src = np.array([
    [38.2946, 51.6963],
    [73.5318, 51.5014],
    [56.0252, 71.7366],
    [41.5493, 92.3655],
    [70.7299, 92.2041] ], dtype=np.float32)
dst = np.array([
    [38.2946, 51.6963],
    [73.5318, 51.5014],
    [56.0252, 71.7366],
    [41.5493, 92.3655],
    [70.7299, 92.2041] ], dtype=np.float32)
tform = trans.SimilarityTransform()
res =tform.estimate(dst, src)
M = tform.params
print(res)
print(M)

【运行结果】:

skimage库的transform.SimilarityTransform()用法

4.2

from skimage import io,data
from skimage import transform as tf
img = data.camera()
io.imshow(img)
tform = tf.SimilarityTransform(scale=1.5,rotation=np.deg2rad(10),translation=(10,12))
img1 = tf.warp(img,tform)
io.imshow(img1)

原图skimage库的transform.SimilarityTransform()用法    相似变换后的图skimage库的transform.SimilarityTransform()用法

上一篇:Skimage中分水岭算法的一些理解


下一篇:鹅妹子的skimage.measure.regionprops