实验截图:
- 在RGB和HSI色彩空间上分别对彩色图像进行平滑、锐化:

实验代码:
rgb=imread('erciyuan.jpg');
r=rgb(:,:,1);
g=rgb(:,:,2);
b=rgb(:,:,3);
subplot(231);
imshow(rgb);
title('RGB原图');
m=fspecial('average');
r_filtered=imfilter(r,m);
g_filtered=imfilter(g,m);
b_filtered=imfilter(b,m);
rgb_filtered=cat(3,r_filtered,g_filtered,b_filtered);
subplot(232);
imshow(rgb_filtered);
title('RGB空间平滑');
lapMatrix=[1 1 1;1 -8 1;1 1 1];
i_tmp=imfilter(rgb_filtered,lapMatrix,'replicate');
i_sharped=imsubtract(rgb,i_tmp);
subplot(233);
imshow(i_sharped);
title('RGB空间平滑+锐化');
rgb=im2double(rgb);
r=rgb(:,:,1);
g=rgb(:,:,2);
b=rgb(:,:,3);
i=(r+g+b)/3;
m1=min(min(r,g),b);
m2=r+g+b;
m2(m2==0)=eps;
s=1-3.*m1./m2;
m1=0.5.*((r-g)+(r-b));
m1=sqrt((r-g).^2+(r-b).*(g-b));
n=acos(m1./(m1+eps));
h=n;
h(b>g)=2*pi-h(b>g);
h=h/(2*pi);
h(s==0)=0;
hsi=cat(3,h,s,i);
subplot(234);
imshow(hsi);
title('HSI原图');
m=fspecial('average');
r_filtered=imfilter(h,m);
g_filtered=imfilter(s,m);
b_filtered=imfilter(i,m);
rgb_filtered=cat(3,r_filtered,g_filtered,b_filtered);
subplot(235);
imshow(rgb_filtered);
title('HSI空间平滑');
lapMatrix=[1 1 1;1 -8 1;1 1 1];
i_tmp=imfilter(rgb,lapMatrix,'replicate');
i_sharped=imsubtract(rgb_filtered,i_tmp);
subplot(236);
imshow(i_sharped);
title('HSI空间平滑+锐化');
结果分析:
- 对一个RGB图像进行平滑操作时,我们需要将它的RGB三个通道都分离出来分别平滑,然后再将三个平滑后的通道合并起来就能得到RGB平滑后的图;对于HSI也是一样的方法,同样也是对三个通道分别操作再合并即可。我在这里用了lapMatrix和imfilter函数来生成一个i_tmp图像,然后再将它与rgb图相减来实现锐化的效果。