Afficher commentaires plus anciens
マトラボでのホモグラフィ変換のやり方を教えてほしいです.現在,斜め方向から撮影した画像を,ホモグラフィ変換を用いて真上から見たような俯瞰画像に変換したいと思っています.
変換前の斜めから見た画像の4点(左上,右上,右下,左下)のpixel値の座標と,変換後の目指している俯瞰画像の4点のpixel値の座標はわかっていて,ホモグラフィ行列も求めています.このホモグラフィ行列を斜めから見た画像に適用する方法が分かりません.どなたか分かる方教えていただけないでしょうか.
ちなみに,変換前の座標はそれぞれ左下,左上,右上,右下の順で(910.774,965.829),(639,229,865.667),(949.414,462.938),(1091.16,637.62)で,変換後の座標が(527.402,833.139),(509.453,290.694),(1247,334.963),(1260.57,772.22)です.
また,ホモグラフィ行列は[0.0207 -0.7512 892.1442
0.4271 0.3142 -399.4835
-0.000462 -0.00023555 1]
となっています.よろしくお願いします.
追記:解決いたしました.回答ありがとうございました.本当に助かりました.
Réponse acceptée
Plus de réponses (1)
Shunichi Kusano
le 9 Fév 2022
image processing toolboxをお持ちでしたらimwarp関数を使えば簡単に済みます。
自作する場合、まず作成された変換行列を使って、XY座標を変換。変換した座標でinterp2で内挿、という手順です。
なんとなくのコードを書いておきます。検証してないので抜け漏れあるかもしれません。適宜出てくる変数を見つつ、確認しながらお使いください。
sz = size(img,1:2); % 変換したい画像の縦横のピクセル数を取得
[x_org,y_org] = meshgrid(1:sz(2),1:sz(1)); % 画像の各ピクセルに対するX座標、Y座標
new_coords = [x_org(:) y_org(:) ones(numel(x_org),1)] * H; % 変換行列Hでx_orgとy_orgを変換(MATLABは右からかけることに注意してください)
x_new_row = new_coords(:,1);
y_new_row = new_coords(:,2);
% 500x500で新しい座標を定義(等間隔にするためmeshgridを使う)
[x_new,y_new] = meshgrid(linspace(min(x_new_row),max(x_new_row),500),linspace(min(y_new_row),max(y_new_row),500));
img_new = interp2(x_new_row,y_new_row,img(:),x_new,y_new); % 内挿して等間隔な座標での値を計算(3チャンネルの場合はチャンネルごとに)
3 commentaires
大貴 木戸
le 9 Fév 2022
Shunichi Kusano
le 10 Fév 2022
imwarpで、OutputViewプロパティを指定する必要があるかと思います。変換した画像の大きさや範囲を指定するためです。documentにもありますとおり、imref2dというオブジェクトを定義して、指定します。OutputViewを使ったimwarpについては、下記のサンプルが参考になるかもしれません。
大貴 木戸
le 10 Fév 2022
Catégories
En savoir plus sur 汎用的な幾何学的変換 dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





