How do I divide image into overlapping blocks size

1 次查看(过去 30 天)
In a paper, it has been said that they have computed frequency over a discrete grid of granularity using 15x15 windows. Consulting my friend, it means overlapping blocks centered at each 8 pixels, that its length and width would be 15 pixels.
How can I do it with blockproc()? Or is there any other useful ways?
  2 个评论
surendra hima
surendra hima 2017-2-13
I WANT TO DIVIDE AN IMAGE HAVING SIZE 512X512.I WANT TO DIVIDE IT INTO OVERLAPPING BLOCKS. HERE IS MY FOLLOWING CODE clc; clear all; close all; I=imread('surya.jpg'); figure; imshow(I); I1 = rgb2gray(I); figure; imshow(I1); I2=im2bw(I1); figure; imshow(I2); [LL,LH,HL,HH]=dwt2(I2,'haar'); figure('units','normalized','outerposition',[0 0 1 1]) imshow(LL);title('LL band of image'); n=size(LL,1); m=size(LL,2); dl=6 ; % number of vertical portions dc=6 ; % number of horizontal portions a=fix(n/dl); b=fix(m/dc); n0=1; portion=[]; ii=0; for k=linspace(a,n,dl) m0=1; ii=ii+1; jj=0; for p=linspace(b,m,dc) jj=jj+1; im1=LL(n0:k,m0:p,:); portion{ii,jj}=im1; m0=p+1; end n0=k+1; end portion ii=0; for k=1:dl for p=1:dc ii=ii+1; subplot(dl,dc,ii); imshow(portion{k,p}); end end figure('units','normalized','outerposition',[0 0 1 1]) imshow(HH);title('HH band of image'); c=size(HH,1); d=size(HH,2); dl=6 ; % number of vertical portions dc=6 ; % number of horizontal portions e=fix(c/dl); f=fix(d/dc); c0=1; portion=[]; ll=0; for h=linspace(e,c,dl) d0=1; ll=ll+1; oo=0; for g=linspace(f,d,dc) oo=oo+1; im2=HH(c0:h,d0:g,:); portion{ll,oo}=im2; d0=g+1; end c0=h+1; end portion ll=0; for h=1:dl for g=1:dc ll=ll+1; subplot(dl,dc,ll); imshow(portion{h,g}); end end
Image Analyst
Image Analyst 2017-2-13
surendra, is this an answer for Klara? If so put it as an Answer below. If it's a question from you, then ask the question (currently there is no question there) in a new question separate from this one.

请先登录,再进行评论。

采纳的回答

Joseph Cheng
Joseph Cheng 2014-3-27
If blockproc is not working out due to 8, why not use a a nested for loop to carve out the 15x15 block?
[row col]=size(Image)
for i=8:8:col-7
j = 8:8:row-7
block=Image(j-7:j+7,i-7:i+7)
end
end

更多回答(1 个)

Image Analyst
Image Analyst 2014-3-27
You need to specify a negative BorderSize to have the window locations overlap instead of tile. I think it might be something like
B = blockproc(A, [8, 8], fun, 'BorderSize', [-3, -3]);
but that will be a window size of 14 by 14. The problem is that you're using 8. Almost all sliding window functions use an odd number so that the output image is not shifted a half pixel relative to the input image.
  1 个评论
Klara
Klara 2014-3-27
编辑:Klara 2014-3-27
Trying with
fun =@(block_struct) block_struct.data
Sorry, it gives me "invalid border size" error. Since the border size should be positive.

请先登录,再进行评论。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by