2013-03-04 52 views
0

我需要使用matlab將圖像512 * 512分成41 * 41重疊。換句話說,我想先取一個以q爲中心的41 * 41塊,然後移位一個像素,我以q + 1爲中心的41 * 41等。我不能使用Blockproc,因爲它給出了一個不重疊的塊。如何將圖像matlab分成重疊塊

感謝幫助我

回答

0

環路它

block_size = 41; 
row_startpos = 1; 
col_startpos = 1; 
Img = imread('your_image.jpg'); 
>Loop Begins here 
a = Img(row_startpos:block_size,col_startpos:block_size); 
row_startpos = row_startpos+row_overlap; 
col_startpos = col_startpos+col_overlap; 
>Loop Ends here 

添加邊境檢查標準等

+0

感謝您的回覆 – BetterEnglish 2013-03-05 15:02:52

-1

首先聲明一個變量(VAR)來存儲的塊大小41 * 41的圖像塊然後用兩個for循環提取圖像塊。這裏是代碼..

I = imread('cameraman.tif'); 
[row,col] = size(I); 
window = 41; 
Var = zeros(1:window,1:window); 
for i = 21:row-window 
    for j= 21:col-window 
     Var = I(i-20:i+20,j-20:j+20); 
    end; 
end;` 
3

你可以使用BLOCKPROC。這有點不明顯。

集[11]塊大小,然後使用「邊界」參數指定了多大的塊,你希望每個像素周圍:

>> a 

a = 

    8  1  6 
    3  5  7 
    4  9  2 

>> blockproc(a, [1 1], @(bs)disp(bs.data),'BorderSize', [1 1 ]) 
    0  0  0 
    0  8  1 
    0  3  5 

    0  0  0 
    1  6  0 
    5  7  0 

    0  3  5 
    0  4  9 
    0  0  0 

    5  7  0 
    9  2  0 
    0  0  0 

    0  0  0 
    8  1  6 
    3  5  7 

    0  8  1 
    0  3  5 
    0  4  9 

    8  1  6 
    3  5  7 
    4  9  2 

    3  5  7 
    4  9  2 
    0  0  0 

    1  6  0 
    5  7  0 
    9  2  0 
+0

我看到,如果可以顯示每個塊的數據,那麼可以控制數據的處理方式。我的問題不是圖像分割的方式,而是數據在輸出中的連接方式。無法控制它,如果需要以特定格式輸出每個塊。我可以單獨將塊保存在單元格中嗎?然後分別處理每個塊,然後連接結果?這會給我更多的控制權。 – StuckInPhD 2015-03-18 19:01:43

+0

我也有一個關於上述問題的問題在這裏打開:http://stackoverflow.com/questions/29109241/is-there-any-way-to-control-the-concatenation-of-the-blockproc-output我很感謝你的意見。謝謝 – StuckInPhD 2015-03-18 19:02:31

0

,最簡單的方法來獲得重疊塊是使用im2col()和'sliding'選項。

%Read images one at a time , get overlapping patches of size sz,sz and concatenate it to  columns of a matrix. 
% LOOP HERE 
f=imread([inp_dir files(k).name]); 
    % extract patches of image 
    P=[P im2col(f,[sz sz],'sliding')]; 
% END LOOP HERE