Skip to content

Instantly share code, notes, and snippets.

@diego898
Created April 27, 2013 23:53
Show Gist options
  • Save diego898/5475236 to your computer and use it in GitHub Desktop.
Save diego898/5475236 to your computer and use it in GitHub Desktop.
pixel average color - from http://pastebin.com/2tmcGPd8
function color_average(image,diameter,type,thresh)
%% image is the name of the file 'image.format'
%% diameter is the cell size
%% type: either 'circle' or 'square'
%% thresh: from 0 to 1. Size of the gap between cells
[colormat,~,~] = imread(image);
[x,y,z] = size(colormat);
rows = floor(x/diameter);
columns = floor(y/diameter);
out = zeros(rows,columns,3);
pre_image = ones(rows*diameter,columns*diameter,z);
for i = 1:rows
for j = 1:columns
r = mean(mean(colormat((i-1)*diameter+1:i*diameter,(j-1)*diameter+1:j*diameter,1)));
g = mean(mean(colormat((i-1)*diameter+1:i*diameter,(j-1)*diameter+1:j*diameter,2)));
b = mean(mean(colormat((i-1)*diameter+1:i*diameter,(j-1)*diameter+1:j*diameter,3)));
midavgx = (i-1)*diameter+1 + diameter/2;
midavgy = (j-1)*diameter+1 + diameter/2;
if strcmpi(type,'circle')
for I = (i-1)*diameter+1:i*diameter
for J = (j-1)*diameter+1:j*diameter
if sqrt(abs(I-midavgx)^2 + abs(J-midavgy)^2) < thresh/2*diameter
I;
J;
pre_image(I,J,1) = r/255;
pre_image(I,J,2) = g/255;
pre_image(I,J,3) = b/255;
end
end
end
elseif strcmpi(type,'square')
for I = (i-1)*diameter+1:i*diameter
for J = (j-1)*diameter+1:j*diameter
if (abs(I-midavgx) < thresh/2*diameter) && (abs(J-midavgy) < thresh/2*diameter)
pre_image(I,J,1) = r/255;
pre_image(I,J,2) = g/255;
pre_image(I,J,3) = b/255;
end
end
end
end
out(i,j,1) = round(r);
out(i,j,2) = round(g);
out(i,j,3) = round(b);
end
end
imshow(pre_image)
imwrite(pre_image,'output.png','png');
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment