2014-12-05 142 views
0
clear 
I = imread('punk.jpg'); 
figure; imshow(I); 
B=blockproc(I, [4 4], @(x) std2(x.data(:))); 
figure; 
imshow(B,[]); 
J = imresize(B, 4); 
figure; 
imshow(J,[]); 

BW = im2bw(J); 
figure; 
imshow(BW); 

ResultsMatlab的圖像塊處理

我要的,是獲得一個圖像,在n×n個區塊打破它,應用標準偏差每一個,然後讓它二進制文件。

所有這些作爲從圖像中獲取文本的一部分。到目前爲止,我想弄清楚感興趣的地區。

爲什麼第三張圖像是這樣?

原圖:

enter image description here

+0

請張貼原始圖像 – 2014-12-05 16:12:15

+0

@ Benoit_11 [image](http://i.imgur.com/dunOxiA.jpg) – Rentonie 2014-12-05 16:19:10

+0

@Rentonie不,更新你的問題,請 – kkuilla 2014-12-05 16:28:38

回答

3

縮放。

您加載的圖像可能包含uint8值(0到255)。然後您通過blockproc對其執行std2。這將是double的輸出,但它沒有被縮放,因此它的值將與原始值相似。

然後您可以在沒有任何輸入的情況下致電im2bw。這將閾值級別設置爲0.5,如果您認爲類型爲double的圖像在0和1之間縮放(由許多MATLAB圖像處理產生的標準假設),則這是合理的設置。但是,就你而言,顯然大多數值都在0.5以上,所以絕大多數顯示爲白色。

兩個選項:

1)縮放圖像(例如,做im2double(I)當你將它傳遞到blockproc
2)給出im2bw的閾值。您可以使用graythresh自動計算一個,例如BW = im2bw(J,graythresh(J));

請注意,這種縮放問題會影響其他圖像處理過程並保存圖像。類型爲double的圖像,或者您將對其執行處理,使其變爲雙倍?確保它在0和1之間縮放,或者在處理之前縮小爲im2double。當您保存的圖像顯示爲空白時,這樣可以避免您回到此處詢問有關問題。