2012-06-04 43 views
1

我有一個尺寸爲256 * 256的圖像,我想對圖像進行塊處理。要做到這一點,我想獲得64 * 64 = 4096塊,每個16像素。我是Matlab的新手,所以我發現很難找到具體的命令來做到這一點。到目前爲止,我擁有的是,在matlab中對圖像進行塊處理

I=imread('kidneyimage.jpg'); 
    I=rgb2gray(I); 
    % block wise processing needed. 

任何幫助的命令真的很感激。

回答

2

要做到這一點,您可以使用函數im2col

http://www.mathworks.fr/help/toolbox/images/ref/im2col.html

+0

感謝您的回覆。其實我想要的是對每個塊進行haar小波變換並獲得特徵[Ca,Ch,Cv,Cd]。我知道haar變換的命令[Ca,Ch,Cv,Cd] = dwt2(I,'haar');但是我怎麼能通過塊而不是整個圖像,並分別爲每個塊獲得[Ca,Ch,Cv,Cd]? – Krishan

1

如果你剛剛用Matlab,試試最簡單的方法:用兩個嵌套循環for遍歷和操縱每個塊。查看imread的幫助頁面,該功能爲您提供了一個填充每個像素顏色的矩陣。 Matlab有特殊的符號來使用colon (:) operator提取部分矩陣,因此您可以輕鬆地逐個修改圖像塊。

+4

我實際上建議任何人(特別是初學者)習慣於解決問題_without_' for'循環,並以正確的方式進行。 –

+0

@EitanT據我所知,Matlab中的循環是一個性能問題。那是對的嗎? – Krishan

+0

@Krishan是的,在MATLAB中你應該總是試着去做它們。 –

0

看來,功能B =blockproc(A, [M N], fun)正是你所需要的。它爲每個圖像塊A應用函數fun,然後連接結果。也有直接從文件讀取圖像的選項。