2019年5月27日 更新

Extracting Straight Lines〜画像から境界線を効率よく求める方法〜

本記事では,IEEE Transactions on Pattern Analysis and Machine Intelligence に投稿された,「Extracting Straight Lines」の論文を説明し,実装を行います.1986年に投稿された少し古めの論文ですが,アイディアは非常に面白いです.

10,825 view お気に入り 1

はじめに

境界検出は画像処理の中で特に重要な手法です.画像の中に含まれるエッヂを強調する方法は多くの画像処理の研究者によって研究されました.このサイトで紹介した Total Variationに基づく画像再構成や,画像とフィルタの畳み込み演算なども,こういった目的でなされることが多いです.また,古典的な方法であれば,Hough変換などが考えられるでしょう,

問題設定

 (5483)

例えば,上のような画像を見てみましょう.画像の中心付近に左側と右側とを区別する線が見えると思いますが,このような境界線を検出するにはどうすればよいのでしょうか.

今回はJ.Brian Burnsらによって1986年に提案された,「Extracting Straight Lines」と,それの発展系の「LDS: a Line Segment Detector」を紹介します.

Extracting Straight Lines

Extracting Straight Lines のアルゴリズムでは,Gradient orientation と,Line Supportという概念が必要になります.それぞれに関して,具体的に説明していきます.

Gradient Orientation

Gradient とは勾配のことです.もし画像の輝度が大きく変化している部分があるなら,それは境界である可能性が高くなるでしょう.この輝度値変化のベクトルをGradient Orientation と論文では呼んでいます.

画像の輝度値を$I$として, \begin{align} \nabla u = \begin{pmatrix} \nabla_x u, \nabla_y u \end{pmatrix}^\top \end{align}

を各ピクセルで計算します. 先ほどの画像でこれを計算すると,以下のような結果が得られます.

Gradient Orientation

Gradient Orientation

この一部分を拡大してみると,
取り出す領域

取り出す領域

Gradient Orientation

Gradient Orientation

という感じで得られています.これがExtracting Straight Lines の第一歩です.

ただし,ノイズによってGradient は歪められてしまうので,$|\nabla u|$がある閾値よりも小さいものはカットします.
33 件

関連する記事 こんな記事も人気です♪

ディジタル画像処理~pythonによる空間フィルタリングpart1~ 

ディジタル画像処理~pythonによる空間フィルタリングpart1~ 

ディジタル画像処理を解説します.今回は,代表的な空間フィルタリングをpythonで実行してみました。
亀谷 桃子 | 13,686 view
Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

画像処理の一つ,モルフォロジー変換をPython と OpenCVのライブラリを用いて実装し,それを2値画像に対して適用します.
等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

前回の記事「等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 1」の続きです. 実際に実装をして,写像を確かめてみます.
スパースモデリング ~少量データから画像を復元~

スパースモデリング ~少量データから画像を復元~

matlab のコードをもとに,スパースモデリングとは何かについて説明します.今回はスパースモデリングの説明です.
点像分布関数の話

点像分布関数の話

光学系を理解するうえで前提として知っておいた方が良い内容
Yoshiyuki Arai | 4,395 view

この記事のキーワード

この記事のキュレーター

エルピクセル編集部 エルピクセル編集部