用MATLAB编写一个彩色图像的马赛克处理函数 调用格式为 p_msk = mymsk( pic , w ) ,pic为输入的原始彩色图片,W为马赛克的宽度,p_msk为函数处理后输出的马赛克处理后的图片。 mymsk函数内部处理过程: 步骤1:把图片的行数和列数截取为100的整数倍,得到pic_new,比如:如果原始图片大小为630*540,则pic_new为600*500。 步骤2:把输入的彩色图片pic_new的r,g,b三个通道抽出,分别给pic_new_r, pic_new_g, pic_new_b,。 步骤3:分别把pic_new_r, pic_new_g, pic_new_b这三个灰度图,按照w*w像素区块进行马赛克化处理,得到三个马赛克化后的图; 步骤4:再把步骤3得到的三个通道的马赛克图利用cat()函数重新拼接成一个彩色图p_msk;
时间: 2024-02-29 12:52:21 浏览: 216
MSK.zip_MATLAB msk_MSK modulation_msk
好的,以下是MATLAB代码实现:
```matlab
function p_msk = mymsk(pic, w)
% pic为输入的原始彩色图片,w为马赛克的宽度,p_msk为函数处理后输出的马赛克处理后的图片。
% 步骤1:把图片的行数和列数截取为100的整数倍
[rows, cols, ~] = size(pic);
rows = floor(rows/100)*100;
cols = floor(cols/100)*100;
pic_new = pic(1:rows, 1:cols, :);
% 步骤2:把输入的彩色图片pic_new的r,g,b三个通道抽出
pic_new_r = pic_new(:, :, 1);
pic_new_g = pic_new(:, :, 2);
pic_new_b = pic_new(:, :, 3);
% 步骤3:分别把pic_new_r, pic_new_g, pic_new_b这三个灰度图,按照w*w像素区块进行马赛克化处理
mask = ones(w, w)/(w*w);
pic_new_r_msk = conv2(pic_new_r, mask, 'same');
pic_new_g_msk = conv2(pic_new_g, mask, 'same');
pic_new_b_msk = conv2(pic_new_b, mask, 'same');
% 步骤4:再把步骤3得到的三个通道的马赛克图利用cat()函数重新拼接成一个彩色图p_msk
p_msk = cat(3, pic_new_r_msk, pic_new_g_msk, pic_new_b_msk);
```
调用格式为:`p_msk = mymsk(pic, w)`,其中`pic`为输入的原始彩色图片,`w`为马赛克的宽度,`p_msk`为函数处理后输出的马赛克处理后的图片。
阅读全文