2016-09-20 72 views
0

我做了一些識別平臺號碼,然後我被卡住時提取它,我讀參考,我必須perfom水平排名過濾,但我不知道該怎麼做。代碼:Perfom水平排序濾波matlab

a = imread('Izy.jpg'); 
b = imresize(a,0.5); 
c = rgb2gray(b); 
Py = [ -1,0,1; -1,0,1 ; -1,0,1];   
Gp = conv2(c,Py); 
Gpx = edge(Gp,'prewitt'); 
cl = bwareaopen(Gpx,10); 
imshow(cl) 

Izy.jpg output image and i want get the red rectangled that i mark then crop it

感謝

+0

你能後的輸入圖像以及:從邊界值,我們可以從原始圖像

[row, col] = ind2sub([size(c,1), size(c,2)],find(logical_result == 1)); result = c(min(row):max(row),min(col):max(col)); imshow(result); 

此給出以下結果提取所關注區域?此外,爲什麼在使用內置函數之前,您已經與水平Prewitt運算符進行了交匯? – nahomyaja

+0

已更新先生。我讀過參考書,我們必須使用垂直邊緣prewitt,並使用水平等級過濾來提取板數。你對這個問題有什麼好的建議嗎?謝謝 –

+0

您是否找到了解決方案?我編寫了一些可以用於這個特定圖像的東西,但不是一般的東西。 – nahomyaja

回答

0

我只是嘗試了代碼,以這種特殊的形象工作,但不是一般的一個。這裏我們有輸入圖像。

Original Image

a = imread('Izy.jpg'); 
b = imresize(a,0.5); 
c = rgb2gray(b); 

直到這裏的代碼讀取圖像入變量a,鱗片它歸結爲一半大小(存儲在b),然後從一個3信道的圖像並將其轉換爲灰度級(存儲在c )。我建議使用Canny邊緣檢測器在檢測器Prewitt算子如下:

Gpx = edge(c,'canny'); 
L = bwlabel(Gpx,8); 

Edge Detected Image

  • 邊緣檢測二值圖像(存儲在Gpx)將有幾個前景圖像或區域。區域是像素的集合,其中每個成員像素連接到其8個相鄰像素中的至少1個。這些區域使用bwlabel()標記並存儲在L中。
  • 使用regionprops('properties','properties',..),我們得到了圖像中存在區域不同屬性的結構。

這裏,areaeccentricity屬性是爲區域計算的。 eccentricity值幫助我們識別出一個區域是圓形還是線形。爲圓,該值是0以及用於一條線,該值爲1

imgstat = regionprops(L,'Area','Eccentricity'); 
area = [imgstat.Area]; 
ecc = [imgstat.Eccentricity]; 

由於我們在圖像中129(size(imgstat))區域,每個區域都會有一些區域和偏心值。使用試驗和錯誤來確定areaeccentricity屬性的所需值。

應用近似屬性值來獲取車牌的邊界,並將區域索引存儲在label中。 logical_result從標籤圖像中提取並存儲所需的區域。

label = find((area > 150) & (ecc < 0.95) & (ecc > 0.9)); 
logical_result = ismember(L,label); 
figure;imshow(logical_result) 

的圖像存儲在logical_result

Extracted regions

現在,從logical_result計算邊界值。這些值被作爲索引恢復,因此我們必須使用ind2sub()將它們轉換爲下標。

Output Obtained

+0

這是awsome先生,你想解釋代碼先生從imstat結果?,我很難理解這一點。非常感謝 –

+0

我已經通過詳細的解釋更新了答案。希望這可以幫助! – nahomyaja

+0

令人難以置信的解釋! ,非常感謝 –