添付画像の線を検出するためのアイデアを探しています。線は垂直であると見なされますが、品質が非常に低く、ぼやけた線の間には 2 ~ 3 ピクセルしかありません。
私はすでにこれらの方法を試しました:垂直方向の侵食と膨張->CLAHEの強化に良い結果->強化に良いハフ->画像を黒に変換してから失敗し、途中で壊れた線や橋が多すぎます。また、縦線マスクも試してみました。基本的に、白黒画像変換に基づく方法はこれには適用できません。
添付画像の線を検出するためのアイデアを探しています。線は垂直であると見なされますが、品質が非常に低く、ぼやけた線の間には 2 ~ 3 ピクセルしかありません。
私はすでにこれらの方法を試しました:垂直方向の侵食と膨張->CLAHEの強化に良い結果->強化に良いハフ->画像を黒に変換してから失敗し、途中で壊れた線や橋が多すぎます。また、縦線マスクも試してみました。基本的に、白黒画像変換に基づく方法はこれには適用できません。
線に沿って画像を折りたたんで、1D プロファイルを取得します。そこで検出を行います (たとえば、中央値より上のピークを調べることによって)。
折りたたんだ画像がこちら
そこの物体検出は明らかです
ノイズの多い画像でのかすかなエッジ検出に関して非常に有望な作品: 直線の基本バージョン: http://www.wisdom.weizmann.ac.il/~meirav/EdgesGalunBasriBrandt.pdf より高度なバージョン: http://www.wisdom.weizmann .ac.il/~meirav/Curves_Alpert_Galun_Nadler_Basri.pdf
作成者がコードを公開したかどうかはわかりません。著者に直接連絡する価値があるかもしれません。
これらの研究は、かすかなエッジを検出するためのよく研究され原理に基づいた方法を提案しています。
ピークが 5 ピクセル以内にあると仮定して、ラインを見つける別のアプローチを次に示します。画像の小さな回転に耐性があります。
img = imread('http://i.stack.imgur.com/w7qMT.jpg');
img = rgb2gray(img);
%# smoothen the image a little with an anisotroic Gaussian
fimg = imfilter(double(img),fspecial('gaussian',[3 1]));
%# find the lines as local maxima
msk = ones(5);
msk(:,2:4) = 0;
lines = fimg > imdilate(fimg,msk);