Filter löschen
Filter löschen

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

3 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Matt J
Matt J am 23 Mai 2013
Bearbeitet: Matt J am 23 Mai 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