How do I divide image into overlapping blocks size
1 view (last 30 days)
Show older comments
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 Comments
surendra hima
on 13 Feb 2017
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
on 13 Feb 2017
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.
Accepted Answer
Joseph Cheng
on 27 Mar 2014
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
0 Comments
More Answers (1)
Image Analyst
on 27 Mar 2014
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 Comment
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!