Create a mosaic using average color of block given image

2 views (last 30 days)
I am required to read an image and generate an 8x8 mosaic using the average color of each block. This is my work so far, however the output is black and white. I need help to get the colors. Thank you.
smashpic = imread('PA6_smashing.png');
myfun = @(block_struct) mean2(block_struct.data) *...
ones(size(block_struct.data),class(block_struct.data));
mosaic = blockproc(smashpic,[8 8],myfun);
imshow(mosaic);

Accepted Answer

Swatantra Mahato
Swatantra Mahato on 22 Oct 2020
Hi,
I am assuming you want to get the average of color of each block for each component separately. In your function "myfun" by using "mean2()" you get the mean of the entire block as a single value which is then used for R,G and B values.
One way to get the mosaic in color would be to calculate the average for each color of the block separately and then combine them using the "cat" function. Here is an example :
smashpic = imread('peppers.png');
myfun = @(block_struct) cat(3,mean2(block_struct.data(:,:,1))*ones(block_struct.blockSize,class(block_struct.data))...
,mean2(block_struct.data(:,:,2))*ones(block_struct.blockSize,class(block_struct.data))...
,mean2(block_struct.data(:,:,3))*ones(block_struct.blockSize,class(block_struct.data)));
%myfun = @(block_struct) mean2(block_struct.data) *...
%ones(size(block_struct.data),class(block_struct.data)); %resulting image is black and white
mosaic = blockproc(smashpic,[8 8],myfun);
imshow(mosaic);
Hope this helps

More Answers (0)

Community Treasure Hunt

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

Start Hunting!