エッジに合わせて自動回転
画像の主要な直線エッジが垂直および/または水平になるように、自動的に回転します。
画像内の主要な直線エッジ(例: 書類、パッケージ、パネル、棚の辺)を縦軸、横軸、またはそのどちらか近い方に最もよく揃える回転角を見つけることで画像を自動で傾き補正し、その角度だけフル解像度画像を自動拡張されたキャンバスで回転して、どこも切り取られないようにします。
このブロックの仕組み
このブロックは、画像の主要な勾配方向から回転角を推定し、その回転を画像に適用します。このブロックは:
画像をグレースケールに変換します(カラー画像は
BGR2GRAY)で変換されます)。作業用コピーをダウンスケールし、その最大寸法が最大で
internal_resolutionピクセルになるようにします(既定値 1000、速度向上のため。検出された角度はスケール不変で、後でフル解像度の元画像に適用されます)フラットで低テクスチャの画像(画素標準偏差が非常に低い)を検出し、見つかった場合は処理をスキップして、画像を変更せずに
angle = 0.0CLAHE で局所コントラストを強調し、ノイズ感度を下げるために軽いガウシアンぼかしを適用して、候補角度のスコアリングにのみ使う float32 画像を生成します
Sobel 勾配を 1 回計算し、勾配方向の大きさで重み付けしたヒストグラム(0 度から 180 度未満)を作成します。主要な直線の勾配はその線に対して垂直を向くため、垂直線はヒストグラムを 0 度付近に、水平線は 90 度付近に集中させます
判別しにくいヒストグラム(明確に優勢な方向がないもの)を除外し、画像を変更せずに返します
ヒストグラムの支配的なモードを、近傍の方向に対する 2 倍角の重み付き円形平均で微調整して 1 度未満の精度にし、補正量を
(-90, 90]度に垂直/水平または(-45, 45]度にいずれか最終角度の絶対値が
skip_below_degreesより小さい場合は、画像を変更せずにangle = 0.0を返します(すでに十分まっすぐな画像では不要な再エンコード/再サンプリングを避けます)。同様に、最終角度の絶対値がmax_correction_degreesを超える場合、画像は変更せずにangle = 0.0を返します - 補正が許容される傾き範囲を超えると、通常は検索が対象の線ではなく別の主要構造(例: 長い物体のシルエット)に整列してしまったことを意味しますそれ以外の場合は、最終角度だけを使ってフル解像度の元画像を中心回転し、出力キャンバスを自動的に拡張して回転後の画像全体を保持します(
roboflow_core/image_preprocessing@v1の rotate タスク)
このブロックは、傾き補正済み画像(キャンバス拡張あり)と、適用した回転角度を度単位で出力します。角度は OpenCV の規約に従い、正の角度は反時計回りに回転します。
一般的な使用例
書類・ラベルのスキャン: OCR や後続の検出前に、撮影した書類、ラベル、パッケージをまっすぐにして、テキストやバーコードの読み取り精度を向上させます
固定カメラ検査: 固定位置の産業用カメラで取り付けによって生じるわずかな傾きを補正し、後続の測定ブロック(例: サイズや距離の測定)が軸に揃った画像で動作するようにします
搬送ラインと棚の整列: コンベヤー、棚、またはパネルの画像で、本来は縦または横に揃うべきエッジを整列させ、後続の線/エッジベース解析の信頼性を高めます
検出モデル向け前処理: 回転に敏感な物体検出や分類モデルを実行する前に入力画像をまっすぐにします
他のブロックへの接続
このブロックは画像を受け取り、傾き補正済み画像と適用角度を出力します:
検出または分類モデルの前に 推論前に画像をまっすぐにし、傾いた元画像に対してより信頼性の高いモデル出力を可能にします
測定ブロックの前で (例: 距離やサイズの測定)で、軸に揃ったシーンを前提としています
下流の座標マッピングとともに -
角度の出力は(元画像の寸法と合わせて)適用された変換を完全に決定するため、回転後の画像上で行った検出結果は、build_auto_rotate_matrix
型識別子
ステップで次の識別子を使用してください "type" フィールド: roboflow_core/auto_rotate_on_edges@v1 ワークフローにこのブロックをステップとして追加するには。
プロパティ
名前
型
説明
参照
name
str
このステップの一意の識別子を入力してください。
❌
target_orientation
str
画像の主要な直線をどのエッジ方向に揃えるかを指定します。'vertical' は主要な線を縦にする回転を探索し、'horizontal' は主要な線を横にする回転を探索し、'either' はこの 2 つのうち近い方に揃えます(探索は最も近い直角の周囲 +/-45 度の範囲に制限されます)。
✅
skip_below_degrees
float
検出された補正角度の絶対値がこのしきい値(度)より小さい場合、ブロックは入力画像を変更せずに(恒等パススルーで) angle = 0.0を返し、すでに十分まっすぐな画像の不要な再エンコード/再サンプリングを避けます。
✅
max_correction_degrees
float
見つかった最良の補正角度がこの上限を超える(絶対値、度)場合、ブロックは入力画像を変更せずに(恒等パススルーで) angle = 0.0を返します。この設定は、画像のおおよその傾き範囲が分かっている場合(例: 部品が最大でも軸から約 40 度以内で撮影される)に使います。そうすることで、画像内の別の主要構造(例: 対象の線ではなく長い物体のシルエット)が原因で、過大で誤った回転が発生するのを防げます。既定値 90.0 はこの上限を無効にします。
✅
internal_resolution
整数
回転角検索は、最長辺が最大でこのピクセル数になるように縮小した画像の作業用コピー上で実行されます。フル解像度画像は最終回転にのみ使用されます。値を小さくすると検索は速くなりますが、非常に細い線はぼやけることがあります。値を大きくすると細い線の詳細は保持されますが、検索時間は増えます。
✅
この 参照 列は、で利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します ワークフロー 実行時。参照 バインディング 詳細は。
入力と出力のバインディング
利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が エッジに合わせて自動回転 のバージョン v1 あるか確認してください。
入力と出力のバインディング
入力
image(image): 入力画像(カラーまたはグレースケール)を傾き補正します。カラー画像は角度検出のために自動的にグレースケールに変換されます。検出された回転角はフル解像度の元画像に適用されます。出力には、回転後の画像(自動的に拡張されたキャンバス付き)と、適用された角度度単位で。target_orientation(string): 画像の主要な直線をどのエッジ方向に揃えるかを指定します。'vertical' は主要な線を縦にする回転を探索し、'horizontal' は主要な線を横にする回転を探索し、'either' はこの 2 つのうち近い方に揃えます(探索は最も近い直角の周囲 +/-45 度の範囲に制限されます)。skip_below_degrees(float): 検出された補正角度の絶対値がこのしきい値(度)より小さい場合、ブロックは入力画像を変更せずに(恒等パススルーで)angle = 0.0を返し、すでに十分まっすぐな画像の不要な再エンコード/再サンプリングを避けます。max_correction_degrees(float): 見つかった最良の補正角度がこの上限を超える(絶対値、度)場合、ブロックは入力画像を変更せずに(恒等パススルーで)angle = 0.0を返します。この設定は、画像のおおよその傾き範囲が分かっている場合(例: 部品が最大でも軸から約 40 度以内で撮影される)に使います。そうすることで、画像内の別の主要構造(例: 対象の線ではなく長い物体のシルエット)が原因で、過大で誤った回転が発生するのを防げます。既定値 90.0 はこの上限を無効にします。internal_resolution(整数): 回転角検索は、最長辺が最大でこのピクセル数になるように縮小した画像の作業用コピー上で実行されます。フル解像度画像は最終回転にのみ使用されます。値を小さくすると検索は速くなりますが、非常に細い線はぼやけることがあります。値を大きくすると細い線の詳細は保持されますが、検索時間は増えます。
最終更新
役に立ちましたか?