我需要使用matlab將圖像512 * 512分成41 * 41重疊。換句話說,我想先取一個以q爲中心的41 * 41塊,然後移位一個像素,我以q + 1爲中心的41 * 41等。我不能使用Blockproc,因爲它給出了一個不重疊的塊。如何將圖像matlab分成重疊塊
感謝幫助我
我需要使用matlab將圖像512 * 512分成41 * 41重疊。換句話說,我想先取一個以q爲中心的41 * 41塊,然後移位一個像素,我以q + 1爲中心的41 * 41等。我不能使用Blockproc,因爲它給出了一個不重疊的塊。如何將圖像matlab分成重疊塊
感謝幫助我
環路它
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
添加邊境檢查標準等
首先聲明一個變量(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;`
你可以使用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
我看到,如果可以顯示每個塊的數據,那麼可以控制數據的處理方式。我的問題不是圖像分割的方式,而是數據在輸出中的連接方式。無法控制它,如果需要以特定格式輸出每個塊。我可以單獨將塊保存在單元格中嗎?然後分別處理每個塊,然後連接結果?這會給我更多的控制權。 – StuckInPhD 2015-03-18 19:01:43
我也有一個關於上述問題的問題在這裏打開:http://stackoverflow.com/questions/29109241/is-there-any-way-to-control-the-concatenation-of-the-blockproc-output我很感謝你的意見。謝謝 – StuckInPhD 2015-03-18 19:02:31
,最簡單的方法來獲得重疊塊是使用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
感謝您的回覆 – BetterEnglish 2013-03-05 15:02:52