我只是嘗試了代碼,以這種特殊的形象工作,但不是一般的一個。這裏我們有輸入圖像。
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);
- 邊緣檢測二值圖像(存儲在
Gpx
)將有幾個前景圖像或區域。區域是像素的集合,其中每個成員像素連接到其8個相鄰像素中的至少1個。這些區域使用bwlabel()
標記並存儲在L
中。
- 使用
regionprops('properties','properties',..)
,我們得到了圖像中存在區域不同屬性的結構。
這裏,area
和eccentricity
屬性是爲區域計算的。 eccentricity
值幫助我們識別出一個區域是圓形還是線形。爲圓,該值是0
以及用於一條線,該值爲1
imgstat = regionprops(L,'Area','Eccentricity');
area = [imgstat.Area];
ecc = [imgstat.Eccentricity];
由於我們在圖像中129(size(imgstat)
)區域,每個區域都會有一些區域和偏心值。使用試驗和錯誤來確定area
和eccentricity
屬性的所需值。
應用近似屬性值來獲取車牌的邊界,並將區域索引存儲在label
中。 logical_result
從標籤圖像中提取並存儲所需的區域。
label = find((area > 150) & (ecc < 0.95) & (ecc > 0.9));
logical_result = ismember(L,label);
figure;imshow(logical_result)
的圖像存儲在logical_result
現在,從logical_result
計算邊界值。這些值被作爲索引恢復,因此我們必須使用ind2sub()
將它們轉換爲下標。
你能後的輸入圖像以及:從邊界值,我們可以從原始圖像
此給出以下結果提取所關注區域?此外,爲什麼在使用內置函數之前,您已經與水平Prewitt運算符進行了交匯? – nahomyaja
已更新先生。我讀過參考書,我們必須使用垂直邊緣prewitt,並使用水平等級過濾來提取板數。你對這個問題有什麼好的建議嗎?謝謝 –
您是否找到了解決方案?我編寫了一些可以用於這個特定圖像的東西,但不是一般的東西。 – nahomyaja