using discrete cosine transform to break 16x16 to 8x8 blocks
Show older comments
I have to break a image-pixel array down to 8x8 blocks. Here is my code
function imcompress(fig,fmt,mask)
p = imread(fig,fmt);
p = im2double(p);
siz = size(p)-rem(size(p),8);
for c = 1:3
i = j(1:siz(1),1:siz(2),c)
end
Q = dctmtx(8)
fund = @(R) Q*R*Q'
B = blockproc(i, [8 8],fund);
B = blockproc(B, [8 8],@(block) mask.*block.data);
fundid = @(R) Q'*R*Q
I2 = blockproc(B, [8 8],fundid)
I2 = p2(1:siz(1),1:siz(2),c)
imshow(i), figure, imshow(I2)
And I also got my mask function
function mask = mymask(n)
mask=zeros(8);
matr= fliplr(triu(ones(n)));
mask(1:n,1:n)=matr;
end
When I test the picture,which called picture.jpg, I typed imcompress('picture','jpg',mymask(8)) it said Error in imcompress (line 6) ,i = j(1:size(1),1:size(2),c) I am not sure what's wrong with my code. Can someone help me up, and point out some others error codes?
3 Comments
Geoff Hayes
on 10 Dec 2014
Jarvan - what is j in your line of code
i = j(1:siz(1),1:siz(2),c)
In fact, what are you trying to do with i as it gets updated at each iteration of the for loop and so overwrites the values from previous iterations?
As an aside, you should avoid naming variables i and j as these also correspond to the representation of the imaginary number.
jarvan
on 13 Dec 2014
jarvan
on 13 Dec 2014
Accepted Answer
More Answers (1)
Image Analyst
on 15 Dec 2014
0 votes
The FAQ may interest you: http://matlab.wikia.com/wiki/FAQ#How_do_I_split_an_image_into_non-overlapping_blocks.3F
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!