定义一个函数SubSamp_ali,输入为彩色图像文件名,输出并显示尺寸减半的彩色图像,并抑制混叠失真。在命令窗口调用。
彩色图像在matlab中是三维矩阵,而matlab中支持二维线性空间滤波器,所以对彩色图像抑制混叠失真时,需要把R,G,B通道分开,分别做低通滤波。
啊感觉自己真是懂得太少了,虽然上学年学了matlab,感觉像没学一样,以下代码为老师上课讲解的。看来需要更加努力。
m文件执行如下
function im_sub=SubSamp_ali(filename)
im=imread(filename);
im=double(im);%进行四则运算,要把数值变为double
imR=im(:,:,1);
imG=im(:,:,2);
imB=im(:,:,3);
w=fspecial('average',[3,3]);%滤波掩摸
imR=imfilter(imR,w,'replicate','same');%对每一个通道做低通滤波
imG=imfilter(imG,w,'replicate','same');
imB=imfilter(imB,w,'replicate','same');
imR_sub=imR(1:2:end,1:2:end);%减半操作
imG_sub=imG(1:2:end,1:2:end);
imB_sub=imB(1:2:end,1:2:end);
im_sub=cat(3,imR_sub,imG_sub,imB_sub);
imshow(mat2gray(im_sub));
end
命令窗口执行如下:
>> im_sub=SubSamp_ali('lena.bmp');
色图像文件名,输出并显示尺寸减半的彩色图像,并抑制混叠失真。在命令窗口成功调用!