# MATLAB对RGB彩色图像进行加马赛克处理

%图片加马赛克练习
%均值处理方式加马赛克
%参数说明：f表示原图；fr,fg,fb表示原图的RGB三个通道
%imgn表示新图像
%imgnr,imgng,imgnb表示新图像的三个通道，分别用于存储新的图像
%n*n表示设置的马赛克区域像素块的大小

clear all;
close all;
clc;
%原图的路径

%将源图像三个通道值取出
fr = f(:,:,1);
fg = f(:,:,2);
fb = f(:,:,3);
%由于原图像是三维h*w*3,求出单通道图像的大小
[h w] = size(fr);

%设置三个零矩阵用于存储新图像
imgnr = zeros(h,w);
imgng = zeros(h,w);
imgnb = zeros(h,w);

%设置马赛克区域n*n像素块大小
n = 20;
nh = floor(h/n)*n;%将不一定是n的整数倍的图像大小化为整数倍
nw = floor(w/n)*n;

%对R通道进行处理

for j = 1:n:nh
for i = 1:n:nw
imgnr(j:j+n-1, i:i+n-1) =mean(mean(fr(j:j+n-1, i:i+n-1)));%对列进行取均值处理
end
imgnr(j:j+n-1,nw:w ) = mean(mean(fr(j:j+n-1,nw:w )));%处理最后的列
end
for i = 1:n:nw
imgnr(nh:h, i:i+n-1) = mean(mean(fr(nh:h, i:i+n-1)));%处理最后的行
end
imgnr(nh:h, nw:w) = mean(mean(fr(nh:h, nw:w)));%处理最后的角

%处理G通道
for j = 1:n:nh
for i = 1:n:nw
imgng(j:j+n-1, i:i+n-1) =mean(mean(fg(j:j+n-1, i:i+n-1)));
end
imgng(j:j+n-1, nw:w) = mean(mean(fg(j:j+n-1, nw:w)));
end
for i = 1:n:nw
imgng(nh:h, i:i+n-1) = mean(mean(fg(nh:h, i:i+n-1)));
end
imgng(nh:h, nw:w) = mean(mean(fg(nh:h, nw:w)));

%处理B通道
for j = 1:n:nh
for i = 1:n:nw
imgnb(j:j+n-1, i:i+n-1) = mean(mean(fb(j:j+n-1, i:i+n-1)));
end
imgnb(j:j+n-1, nw:w) = mean(mean(fb(j:j+n-1, nw:w)));
end
for i = 1:n:nw
imgnb(nh:h,i:i+n-1) = mean(mean(fb(nh:h, i:i+n-1)));
end
imgnb(nh:h, nw:w) = mean(mean(fb(nh:h, nw:w)));

%三通道图像合成
imgnr = im2double(imgnr)/255;
imgng = im2double(imgng)/255;
imgnb = im2double(imgnb)/255;
imgn = cat(3,imgnr, imgng, imgnb);
imshowpair(f,imgn,'montage');%两张图片显示
title('原图                                                  马赛克处理后图像');


clear all;
close all;
clc;
%原图的路径

% %将源图像单个通道值取出
fr = f(:,:,1);
[h w] = size(fr);
imgn = f;

%设置马赛克区域n*n像素块大小
n = 20;
nh = floor(h/n)*n;%将不一定是n的整数倍的图像大小化为整数倍
nw = floor(w/n)*n;

%对三个通道进行循环处理
for t = 1:3
for j = 1:n:nh
for i = 1:n:nw
imgn(j:j+n-1, i:i+n-1, t) =mean(mean(f(j:j+n-1, i:i+n-1, t)));%对列进行取均值处理
end
imgn(j:j+n-1,nw:w , t ) = mean(mean(f(j:j+n-1,nw:w , t)));%处理最后的列
end
for i = 1:n:nw
imgn(nh:h, i:i+n-1, t) = mean(mean(f(nh:h, i:i+n-1, t)));%处理最后的行
end
imgn(nh:h, nw:w, t) = mean(mean(f(nh:h, nw:w , t)));%处理最后的角

end

imshowpair(f,imgn,'montage');%两张图片显示
title('原图                                                  马赛克处理后图像');



©️2019 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客