2015-10-20 19 views
-1

enter image description here通過圖像處理劃分探地雷達剖面

請看附圖。這是一個GPR文件,然後使用圖像處理技術,我想這個圖像通過標記顏色頂部的整個圖像劃分爲3個區域:

  1. 當圖像在拋物線都非常清晰,高不同像素值 - 綠化帶/線在頂部
  2. 當圖像的拋物線是模糊的,但可見 - 黃帶,
  3. 當拋物線被扭曲或者不拋物線存在 - 紅區

什麼技術應我用?解決問題的最佳方法是什麼?

我在各種情況下都嘗試過各種技術,但都沒有取得成功,因爲在下面的圖片中,有時候拋物線太靠近彼此,識別它們就成了問題。

enter image description here

的我多麼希望到區域它的樣本:https://www.dropbox.com/s/9zm9epgf0gt7591/sample.png?dl=0 一個久經考驗的代碼:最簡單的一種。

clear all 
clc 
%read png image 
H=imread ('origpng.png'); 
%convert to gray scale 
I = rgb2gray(H); 

I(I>150)=0;I(I<100)=0; 
figure,imshow(I) 
J=I; 
J=255-J; 
figure, imshow (J) 
J(J<255)=0; 

figure,imshow (J) 

example

+2

向我們展示您嘗試過的。 – rayryeng

+3

「不同」和「模糊」不是很具描述性的詞。你如何量化拋物線已經模糊了多少?您甚至不會告訴我們您認爲區域在您的示例圖像中的位置。據我所知,那個頂級圖像可能都是綠色的。 – beaker

+1

將其放置在您的文章中。不要置評論中。它看起來很醜。 – rayryeng

回答

2

你的問題不是很明確提出,但我花了一些關於它的時候,感覺就像分享我的想法。我並不是假設這是一個完整或嚴格的答案 - 只是一些可能會給你一些想法的思考。另外,我使用ImageMagick,但是如果您擁有並瞭解Matlab,則應該使用它 - 我不建議您切換工具。

首先,我做了Canny邊緣檢測是這樣的:

convert http://i.stack.imgur.com/XITAE.png -canny 0x1+15%+50% canny.jpg 

,讓我:

enter image description here

我再「南瓜」下來,直到它僅僅是1像素高,這有效地總計和平均所有的列 - 我在這裏10個像素高,所以你可以看到它。它是白色的,有很多拋物線,其他地方很少。

enter image description here

然後我伸出備份至原始圖像的完整高度和模糊了一點 - 注意,一切都交給下面的圖片是隻有一行的「代碼」:

convert http://i.stack.imgur.com/XITAE.png -canny 0x1+15%+50% -resize x1! -normalize -resize 827x310! -blur 0x11 -colorspace gray mask.png 

我然後用上面的不透明蒙了紅色的圖像大小相同的原始這樣的:

convert -size 827x310! xc:red mask.png -compose copy-opacity -composite colouredmask.png 

enter image description here

然後,我把你的原始圖像,並通過首先創建一個黃色圖像,然後融合到你的圖像,然後我混合從上面最重要的是紅色圖像,黃色這樣的顏色的它:

convert -size 827x310! xc:yellow yellow.png 
convert http://i.stack.imgur.com/XITAE.png yellow.png -compose colorize -composite colouredmask.png -compose overlay -composite result.png 

enter image description here

enter image description here

很明顯,你可以設定不同的對米,並使用不同的閾值和事物,但它有點像你所瞄準的那種東西。

所以整個過程是:

# Make mask of peaky areas - line 1 
convert http://i.stack.imgur.com/XITAE.png -canny 0x1+15%+50% -resize x1! -normalize -resize 827x310! -blur 0x11 -colorspace gray mask.png 

# Colour mask with red - line 2 
convert -size 827x310! xc:red mask.png -compose copy-opacity -composite colouredmask.png 

# Tint original image with yellow and then overlay semi-transparent red area 
convert -size 827x310! xc:yellow yellow.png 
convert http://i.stack.imgur.com/XITAE.png yellow.png -compose colorize -composite colouredmask.png -compose overlay -composite result.png 

注意

擠壓像素...對不起我的術語迷惑你!基本上,當我將像素向下擠壓到一行時,您需要想象在圖像頂部放置一塊磚,並將其平展到僅一個像素高。因此,本質上,您在圖像下繪製一條虛線,然後在整個圖像上工作,合計每個垂直列中的白色(即邊緣)像素的數量。具有更多白色像素的列將合計爲更大的數字。沒有白色像素的列將加起來爲零。一旦你得到了每列的總數,你會發現最高的總數 - 假設它是32,然後你將所有的總數乘以255/32,這樣一切都被歸一化爲255或者白色。現在壓扁的條表示每列中的edge energy。然後,當我疊加時,我將其用作紅色的不透明度 - 因此Canny圖像中具有更多白色邊緣的列在結果中將顯示更多紅色。

讓我們來演示如果我縮小到10個像素寬和1個像素高之後會縮小到原始大小 - 基本上這意味着我的結果蒙版將只有10個可能的值(或列)列,並且每個列將是一個恆定的亮度。我把坎尼圖像的下方,所以你可以看到,壓扁帶的亮度表示edge energy

convert http://i.stack.imgur.com/XITAE.png -canny 0x1+15%+50% -resize 10x1! -normalize -scale 827x310! mask.png 

enter image description here

enter image description here

如果你想介紹另一種顏色,你需要找出你的算法是用來控制顏色出現的位置。然後你再次做同樣的事情 - 你在你想要輸出圖像中的顏色的地方製作一個光線較暗的遮罩,在你不需要該顏色的地方使用該遮罩。然後使用該蒙版作爲新顏色的不透明度(正如我在上面標記爲line 2的行中所做的那樣),然後像上面代碼的最後一行那樣覆蓋它。

+1

偉大的工作標誌。我沒有碰到這個問題,因爲我真的不明白需求是什麼。 – rayryeng

+0

@rayryeng我不認爲我完全理解要求 - 但這是一個有趣的問題,雖然在這種情況下可以理解,但沒有任何評論真的提供了非常具體的東西,所以我想我會努力分享一些至少想法,看看是否有球滾動。謝謝。 –

+0

@MarkSetchell非常感謝你的解釋和答案..我可以告訴你,你是多麼的幫助我......我很抱歉,我不能很清楚地解釋要求,因爲要求本身是主觀的,我必須進一步研究一個可行的解決方案的整個方法..但你肯定有「滾球」:) :)真的很感激! – Kashif