Azzera filtri
Azzera filtri

Create a mosaic using average color of block given image

3 visualizzazioni (ultimi 30 giorni)
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);

Risposta accettata

Swatantra Mahato
Swatantra Mahato il 22 Ott 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

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by