2013-03-29 227 views
3

我正在寫一個matlab程序,它將檢測自然場景圖像中的文本。我正在接受this video lecture and paper的幫助。我瞭解了幾個步驟,並進行了邊緣檢測(我在下面添加圖像)。現在我想從最終圖像中提取(分離出)僅文本。我怎麼做?如何使用Matlab提取圖像中的文本區域?

我的代碼:

i = imread('f:\new.jpg'); 
i1 = rgb2gray(i); 
imshow(i1); 

i2 = edge(i1,'canny',0.3); 
imshow(i2); 

se = strel('square',2); 
i3 = imdilate(i2,se); 
imshow(i3); 

i4 = imfill(i3,'holes'); 
imshow(i4); 

[Ilabel num] = bwlabel(i4); 
disp(num); 
Iprops = regionprops(Ilabel); 
Ibox = [Iprops.BoundingBox]; 
Ibox = reshape(Ibox,[4 92]); 
imshow(i); 

hold on; 
for cnt = 1:92 
    rectangle('position',Ibox(:,cnt),'edgecolor','r'); 
end 

最終圖像: enter image description here

回答

1

要裁剪出的圖像的一部分是採取從矩陣子矩陣知道它的邊界指標。例如,如果子矩陣從y1排延伸到y2行並從x1x2列(全範圍含),你會得到子矩陣:

submat = mainmat(y1:y2,x1:x2); 

提取子矩陣之前,你必須得到每個字母的邊界座標。如果您有一個字母的座標爲yx;無論是圖像的區域的所有座標,或只是協調的區域的邊緣,你可以得到邊界座標:

% x-coordinates of the region are in the vector x 
x1 = min(x(:)); 
x2 = max(x(:)); 
% y-coordinates of the region are in the vector y 
y1 = min(y(:)); 
y2 = max(y(:)); 

上述步驟做了所有的信件你可以再單獨字母一個後但如果你想分離連接的字母區域,你必須檢查字母的邊界矩形的重疊。

+0

謝謝你的回答。但是,我怎樣才能裁剪文本區域,因爲圍繞許多不必要的事物都有邊界框?你能提供一些幫助嗎? – Heisenberg

+0

@Heisenberg我需要更具體一點:1.找出你的特定情況下的邊界座標的程序? 2.獲得連接的字母區域?我目前無法做到,但可能會晚點... – plesiv

+1

感謝您的幫助。我現在至少對下一步做什麼有了一些線索:) – Heisenberg

相關問題