公式リンク: https://ww2.mathworks.cn/help/images/ref/cp2tform.html?s_tid=doc_ta。
cp2tform
この機能は、入力された制御点ペアの座標に基づいて空間変換パラメーターを推測することです。
関数の構文は次のとおりです。
从控制点对推断空间变换,并将此变换作为tform结构返回,有些转换类型具有可选的附加参数transformationType,比如下面的语法所示
tform = cp2tform(movingPoints, fixedPoints, transformationType)
指定要使用的多项式的顺序进行空间变换
tform = cp2tform(movingPoints, fixedPoints, 'polynomial', degree)
通过使用相邻控制点在每个控制点推断多项式来创建映射。任何位置的映射都取决于这些多项式的加权平均值,可以选择用于推断每个多项式的点数n,n个最接近的点用于推断每个控制点对的2阶多项式
tform = cp2tform(movingPoints, fixedPoints, 'lwm', n));
创建固定控制点的Delaunay三角测量,并将相应的移动控制点映射到固定控制点。映射对于每个三角形是线性当设的,并且在控制点上是连续的,但由于每个三角形都有自己的映射,所以不连续可微
tform = cp2tform(movingPoints, fixedPoints, 'piecewise linear')
在usedMP和usedFP中返回用于分段线性变换的控制点,还在badMP和badFP中返回被相处的控制点,因为它们是退化折叠三角形的重点顶点
[tform, usedMP, usedFP, badMP, badFP] = cp2tform(movingPoints, fixedPoints, 'piecewise linear')
使用cpstruct结构来存储运动图像和固定运动图像的控制点坐标
tform = cp2tform(cpstruct, transformationType,____)
在usedMP和usedFP中返回用于转换的控制点,不使用不匹配点和预测点。
[tform, usedMP, usedFP] = cp2tform(cpstruct, transformationType, ____)
パラメータの説明:
入力パラメータ:
movingPoints
: 登録または移動する画像内の制御点。m × 2 m \times 2として指定します。メートル×2 つの行列。各行は[x y]
制御点の座標を指定し、データ型は double です。例:[11 11; 41 71]
。fixedPoints
: データムまたは固定イメージ内の制御点。m × 2 m \times 2として指定します。メートル×2 つの行列。各行は[x y]
制御点の座標を指定し、データ型は double です。例:[14 44; 70 81]
。tranformationType
:変換タイプ。次のタイプのいずれかとして指定します。複雑さの高い順にリストされます。cp2tform 関数では、各変換タイプの構造を推測するために、最小限の数の制御点ペアが必要です。
表 1 - 変換タイプとその説明
変換タイプ | 説明する | 制御点ペアの最小数 |
---|---|---|
nonreflective similarity |
非反射類似性。動画内の形状は変化しないが、移動、回転、スケーリングの組み合わせによって画像が歪む場合に、この変換を使用します。直線は真っ直ぐのまま、平行線は平行のまま | 2 |
similarity |
無反射と同じですが、オプションで反射が追加されます | 3 |
affine |
入力イメージ内のシェイプが誤った効果を示す場合は、この変換を使用します。変換後も、直線は直線のまま、平行線は平行線のままですが、長方形は平行四辺形になります。 | 3 |
projective |
シーンが傾いて見える場合にこの変換を使用します。変換後も直線は直線のままですが、平行線は平行ではなくなります。 | 4 |
polynomial |
この変換は、画像内のオブジェクトが湾曲している場合に使用されます。フィッティングで選択した多項式の次数が高いほどフィッティング効果は高くなりますが、登録された画像には参照画像よりも多くの曲線が含まれており、より多くの参照点のペアも必要になります。 | 6-第2レベル 10-第3レベル 15-第4レベル |
piecewise linear |
この変換は、画像が部分的な変形を示す場合に使用されます。 | 4 |
lwm |
画像内の変形に局所的な特性があり、区分的線形条件が十分ではない場合は、この変換の使用を検討してください。 | 6. 推奨事項 12 |
cpstruct
: 選択されたコサイン コントロール ポイント。構造体として指定します。 cpstruct には、動画および固定イメージ内のすべてのコントロール ポイント (ペアになっていないコントロール ポイントや予測されたコントロール ポイントを含む) の x および y のホワイトニングに関する情報が含まれています。cpstruct2pairs
この関数は、不一致および予測された制御点を排除し、有効な制御点ペアのセットを返します。cpstruct は、[ポイントをワークスペースに移動] オプションが選択されている場合に、コントロール ポイント選択ツールによって生成される構造体です。degree
: 多項式変換の次数。整数 2、3、または 4 として指定します。MATLAB でサポートされる数値型を指定できます。n
: ローカル加重平均の計算に使用される点の数。正の整数として指定します。n は 6 まで小さくできますが、n を小さくすると、条件の悪い多項式が生成される危険があります。
出力パラメータ:
tform
:TFORM 構造体。TFORM 構造体として返されます。usedMP
: 空間変換を推測するために使用される制御点の移動 ( n × 2 n \times 2)n×2は、不一致点と予測点を使用せずに、行列の形式で返されます。usedFP
: 空間変換を推測するために使用される固定制御点 ( n × 2 n \times 2)n×2は、不一致点や予測点を使用せずに行列形式で返されます。badMP
: 外れ値であると判断されたため除外された移動制御点 ( p × 2 p \times 2)p×2は行列形式で返されます。badFP
: 固定制御点は外れ値であると判断され、 p × 2 p \times 2として表されるため除外されます。p×2は行列形式で返されます。
使用例
制御点を使用して無反射相似変換構造を作成する
%% cp2tform 函数获取图像转换结构
clc; close all; format compact;
I = checkerboard; % 加载棋盘格图片
J = imrotate(I, 30); % 逆时针旋转30°
figure;
subplot(1,2,1); imshow(I, []); title('原始图片');
subplot(1,2,2); imshow(J, []); title('逆时针旋转30°');
fixedPoints = [11 11; 41 71]; % 固定控制点对
movingPoints = [14 44; 70 81]; % 移动控制点对
cpselect(J, I, movingPoints, fixedPoints);
% 获取非反射相似性变换,使用cp2tform函数返回变换,
% 并将tform的角度和和比例与原始变换的角度和规模进行比较
t = cp2tform(movingPoints, fixedPoints, 'nonreflective similarity');
% 使用一组有效的移动和固定控制点对启动控制点选择工具,可以以交互式添加控制点
% 通过检查平行于x轴的单位向量的旋转和拉伸方式,恢复角度和比例
u = [0 1];
v = [0 0];
[x y] = tformfwd(t, u, v); % 将t中的空间变换作用于u和v,将结果返回给x和y
dx = x(2) - x(1);
dy = y(2) - y(1);
angle = (180 / pi) * atan2(dy, dx)
scale = 1 / sqrt(dx ^2 + dy^2)
結果を示す:
angle =
29.9816
scale =
1.0006