Azzera filtri
Azzera filtri

Recolor an image tile-wise with average colors of these certain tiles

3 visualizzazioni (ultimi 30 giorni)
Hello everyone,
I have the following image (original image is .tif format)
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

Risposta accettata

Sean de Wolski
Sean de Wolski il 23 Mag 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 Commenti
Sean de Wolski
Sean de Wolski il 23 Mag 2013
Modificato: Sean de Wolski il 24 Mag 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
Julian
Julian il 24 Mag 2013
Great! It's always amazing, how fast someone is able to help around here :)
Thank you again!

Accedi per commentare.

Più risposte (1)

Matt J
Matt J il 23 Mag 2013
Modificato: Matt J il 23 Mag 2013
Splitting the image into tiles is easy using FEX: mat2tiles.
>> 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.

Community Treasure Hunt

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

Start Hunting!

Translated by