Recolor an image tile-wise with average colors of these certain tiles
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello everyone,
I have the following image (original image is .tif format)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/147975/image.jpeg)
Now, I would like to recolor it, that I don't have single color pixels anymore. I imagine something like the following:
assess a 10 x 10 pixel wide tile (or any other size), add only the non-zero color values and devide it by the number of non-zero values in this 10 x 10 tile to get the average pixel color. Than, recolor this 10 x 10 tile with the average pixel color. And than repeat this, with all possible not overlapping tiles of the image.
I hope, someone is 1. abler to understand waht I tried to say and 2. also able to help me.
Thank you!
Julian
0 commentaires
Réponse acceptée
Sean de Wolski
le 23 Mai 2013
Use blockproc to handle the block processing
doc blockproc
Then write a function which does the average ignoring zeros. So something like:
blockproc(magic(100),[10 10], @(bs)(sum(bs.data(logical(bs.data)))./nnz(bs.data))*ones(size(bs.data)))
3 commentaires
Sean de Wolski
le 23 Mai 2013
Modifié(e) : Sean de Wolski
le 24 Mai 2013
You could use it in a for-loop over each colorplane
szI = size(I);
I2 = zeros(szI,'like',I);
for ii = 1:szI(3)
I2(:,:,ii) = what_I_Have(I(:,:,ii));
end
Plus de réponses (1)
Matt J
le 23 Mai 2013
Modifié(e) : Matt J
le 23 Mai 2013
>> Image=rand(40,40); mat2tiles(Image,[10,10])
ans =
[10x10 double] [10x10 double] [10x10 double] [10x10 double]
[10x10 double] [10x10 double] [10x10 double] [10x10 double]
[10x10 double] [10x10 double] [10x10 double] [10x10 double]
[10x10 double] [10x10 double] [10x10 double] [10x10 double]
You can then do all the operations you're talking about on each cell using a simple for-loop.
0 commentaires
Voir également
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!