2017-05-11 1 views
1

私は、画像の一部に赤い白の縞模様のオブジェクト(liftramp)が含まれているかどうかを調べようとしています。それが存在する場合、それは次のようになります。present、とするとき、これを好きではない:none単純なアプローチは、ヒストグラムを抽出し、青/緑色のものよりも多くの赤色画素がある場合にカウントするようにしたヒストグラムを使用して色付きオブジェクトの存在を判断する

use Image::Magick; 

my $image = Image::Magick->new; 
my $rv = $image->Read($picture); 
#$rv = $image->Crop(geometry=>'26x100+484+40'); 

my @hist_data = $image->Histogram; 
my @hist_entries; 

# Histogram returns data as a single list, but the list is actually groups of 5 elements. Turn it into a list of useful hashes. 
while (@hist_data) { 
    my ($r, $g, $b, $a, $count) = splice @hist_data, 0, 5; 
    push @hist_entries, { r => $r, g => $g, b => $b, alpha => $a, count => $count }; 
} 

my $total=0; 
foreach my $v (@hist_entries) { 
     if ($$v{r}>($$v{g}+$$v{b})) { $total +=$$v{count}; } 
} 

を比較し、次に$total > 10(任意のしきい値)かどうかを比較します。これは、比較的晴れた日にはうまくいくようですが(存在しない場合、0-2の場合は50-180)、重い雲と夕暮れが検出されると常にliftrampは存在しません。

赤い白いオブジェクトが存在するかどうかを検出するには、よりスマートな方法が必要ですね。だから問題は、より確実にその検出を行う方法ですか?

灰色がかった緑色の背景は、季節によって灰色や茶色などに変わることがあります。私はまた、ピクセルの精度にはそれが少し動くかもしれません(または私はちょうど3-4ピクセルをトリミングし、それらが赤であるかどうかを見てみることができません) - しかしそれは彼が箱を切り取った。

+0

私はこのことについてあまりよく分かりませんが、あなたが提供したサンプル画像に基づいて、白黒(グレースケールではありません)に画像を縮小するのが最も明白な方法です。また、https://dsp.stackexchange.comを試してみることもできます –

+1

リフトランプにマイクロスイッチを設置してネットワークに接続してください – Borodin

+0

* "重い雲と夕暮れが検出され、常にリフトランプが存在しないと言います" *確かにアプローチはありません写真を調べることは、夜間に働くだろうか?私はあなたのアルゴリズムが失敗している最悪の場合の画像を見る必要があると思います。 – Borodin

答えて

4

各画像のスペクトルを得るためにFFTを行うことができます。ストライプ状のバーを持つ画像には、スペクトル内に現れる反復パターンがあります。バーなしで

:ImageMagickのを使用してバーで

convert XqG0F.png -fft +delete -evaluate log 100000 without.png 

enter image description here

convert x5hWF.png -fft +delete -evaluate log 100000 with.png 

enter image description here

5

もう一つの方法は、照明に鈍感になり、それを行うには赤い色合いを探すことです。 HSV色空間に変換する。しかし、赤は黒/灰/白と同じ0色相を持つので、赤をシアンに変えるように画像を反転させます。だから、反転およびHSVに変換した後、色相チャンネルをヒストグラムと180度のImageMagickで0〜255の範囲で50%のグレーまたは128のそれと同等に近いシアンの色相で値を探して、あなたはどうなる

convert XqG0F.png -negate -colorspace HSV -channel red -separate +channel -define histogram:unique-colors=false histogram:without_hist.png 

enter image description here

convert x5hWF.png -negate -colorspace HSV -channel red -separate +channel -define histogram:unique-colors=false histogram:with_hist.png 

enter image description here

あなたは(赤いバー用)第二の画像で見ることができるので、途中の近くにかなりのブロードピークすなわち、50%(水平方向)があるが、何もありませんその領域の最初の画像。

関連する問題