2011-06-02 157 views
1

全部,如何在Matlab中拉伸圖像

我需要知道如何拉伸圖像以便進一步工作。

例如,我有接下來的兩個圖像:

enter image description hereenter image description here

我想這些數字將填補整個廣場就像這樣:

enter image description hereenter image description here

任何幫助將不勝感激。

回答

2

假設背景是一個常數值,並且圖像沒有任何不變的行,COLS,而有用的圖像是在放大圖像的背景中間的矩形:

colsWithImg = find(any(abs(diff(img)))); % idxs of cols with any img in it. 
rowsWithImg = find(any(abs(diff(img')))); 
imgWithNoBG = img(min(rowsWithImg):max(rowsWithImg),min(colsWithImg):max(colsWithImg)); 
% this will also work: but you will lose any constant rows/cols 
% imgWithNoBG = img(rowsWithImg,colsWithImg); 

現在你有一個圖像沒有背景假設你有圖像處理工具箱,使用imresize很容易展開它。

resizedImg = imrezize(imgWithNoBG,newSize); 

要取出的工件,第一descritize所提取的字符:

descImg = floor((nDescLevels*imgWithNoBg)/max(max(imgWithNoBg))) 
colsNoArtifact = find(any(abs(diff(descImg)))); 
rowsNoArtifact = find(any(abs(diff(descImg')))); 

然後從非descritized圖像

img3 = imgWithNoBG(min(rowsNoArtifact):max(rowsNoArtifact),min(colsNoArtifact):max(colsNoArtifact)); 

降低descritization級別的數量提取正確的行會有助於刪除更多的神器,但會使它更容易錯誤地刪除部分角色。我也預見到像1或7這樣的數字會出現一些問題,部分角色可能會被誤認爲是神器。

+0

@BlessedKey感謝您的幫助,但它並沒有幫助我。我正在得到我以前的東西。這可能是因爲圖像頂部有黑線。有什麼建議麼? – 2011-06-02 22:22:01

+0

@Michael Hrm。這聽起來像是你想將「數字」部分與「神器」或「噪音」部分分開。用任意類型的噪音做這件事需要一些類型的OCR。如果您可以假設工件看起來像是圖像頂部/底部或左側/右側的條形圖,則可以進行快速簡便的黑客入侵。只需重複我上面概述的背景刪除過程,但僅限於提取的圖像。如果工件內有小的變化,您可以先嚐試將圖像量化爲少量的灰度級。 我已編輯回覆以反映此情況。 – BlessedKey 2011-06-03 17:22:13

+0

@BlessedKey現在確實在切割黑色線條,但是nDescLevels的價值是什麼,是否有一種方法可以爲每個圖像找出他的價值?就像你之前說的評論,如果它可以削減一部分數字,那麼它就不是那麼好,所以這隻適用於這種情況。再次感謝 – 2011-06-03 20:53:33

0

圖像的背景是黑色的?白色? 找到包圍圖像的最小矩形。而削減的命令IMG的邊界(uppixel:downpoxil,leftpixel:rightpixel)

您可以通過for循環找到的最小的矩形,而不是在後臺比較每個像素對邊境

+0

你是什麼意思「比較每個像素不在背景中對邊界」。正如你所看到的,圖像上方有黑線,我認爲這可能會造成麻煩。你能給我一些代碼示例嗎?謝謝... – 2011-06-02 14:15:53