トップへ(mam-mam.net/)

Delphi掲示板~射影変換(ホモグラフィ変換)で画像の台形や平行四辺形領域を長方形変換について

Delphi掲示板

一覧に戻る

射影変換(ホモグラフィ変換)で画像の台形や平行四辺形領域を長方形変換について

解決済
f.izawa
(2025-09-15 19:56:51)
貴重なソースコードの公開、ありがとうございます。
「射影変換(ホモグラフィ変換)で画像の台形や平行四辺形領域を長方形変換」のコードそのままで、
台形補正をしています。
完璧に成功する画像と、そうでない画像(台形側の右下が切れる、まったく変換できない)があります。
まったく変換できないときは、yy, xx の値が元のビットマップの範囲外になっています。
元画像は JPG です。
ScanLine, Pixels どちらを使っても同じ結果になります。
 
何かしら、ヒントでも頂けると非常に有難いです。
f.izawa
(2025-09-15 20:52:37)
傾向として、画像サイズが大きい(カメラで撮影した画像)と失敗するようです。
画面に表示してキャプチャした画像だとほぼ大丈夫でした。
mam
(2025-09-17 11:25:25)
大きい画像を扱うと、値がオーバーフローしているようです。
procedure TForm1.Button2Click(Sender: TObject);
で a0、b0 を計算している箇所を以下に変えてみてください。

  a0:=(
        Extended(tmp[1].X+tmp[3].X-tmp[0].X-tmp[2].X)*(tmp[2].Y-tmp[3].Y)-
        Extended(tmp[1].Y+tmp[3].Y-tmp[0].Y-tmp[2].Y)*(tmp[2].X-tmp[3].X)
      )/
      (ImgWidth*
        (
          Extended(tmp[2].X-tmp[1].X)*(tmp[2].Y-tmp[3].Y)-
          Extended(tmp[2].Y-tmp[1].Y)*(tmp[2].X-tmp[3].X)
        )
      );
  b0:=(
        Extended(tmp[1].X+tmp[3].X-tmp[0].X-tmp[2].X)*(tmp[2].Y-tmp[1].Y)-
        Extended(tmp[1].Y+tmp[3].Y-tmp[0].Y-tmp[2].Y)*(tmp[2].X-tmp[1].X)
      )/
      (ImgHeight*
        (
          Extended(tmp[2].X-tmp[3].X)*(tmp[2].Y-tmp[1].Y)-
          Extended(tmp[2].Y-tmp[3].Y)*(tmp[2].X-tmp[1].X)
        )
      );
f.izawa
(2025-09-17 11:55:31)
>大きい画像を扱うと、値がオーバーフローしているようです。

mam 様、ありがとうございます。解決しました。
素晴らしいです!

返信

名前
1~16文字
質問に対する返信
1~4000文字
解決
解決時にON
解決済
返信