Clear Filters
Clear Filters

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

3 views (last 30 days)
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

Accepted Answer

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

Sign in to comment.

More Answers (1)

Matt J
Matt J on 23 May 2013
Edited: Matt J on 23 May 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!