数字图像处理第六章
数字图像处理—彩色图像处理
(五) 彩色图像的空间滤波
彩色图像滤波的目标就是同时达到三个目的:削弱噪声,保护色调和保护边缘或细节信息。下面主要讨论的就是彩色图像的平滑处理和锐化处理。
5.1 彩色图像的平滑处理
平滑单色图像的一种方法是定义相应的系数是 1 的模板,用空间模板的系数去乘所有像素的值,并用模板中元素的总数去除。用空间掩膜平滑来处理彩色图像,该处理用处理灰度图像的相同方法来表达,只是代替单个像素。
令 Sxy表示彩色图像中以(x,y)为中心的邻域的一组坐标。在该邻域中,RGB向量的平均值是:
其中,K 是邻域中像素点的数量。附加向量的特性是:
该向量的每个分量都作为将要得到的结果,结果是用每个分量图像执 邻域平均获得的,使用的是上边提到的滤波器模板。因此,得出这样的结论:用邻域平均的平滑可以在每个图像平面的基础上执行。如果邻域平均直接在彩色向量空间执行,那么结果是相同的。
概念上,平滑 RGB彩色图像fc时,线性空间滤波由下面的步骤组成:
1.抽取 3 个分量图像:
fR= I(:,:,1);
fG = I(:,:,2);
fB = I(:,:,3);
2.分别过滤每个分量图像。例如,令w = fspecial(‘average’, 25)表示用fspecial产生的平滑滤波器,平滑分量图像:
fR_filtered = imfilter(fR, w, ‘replicate’);
fG__filtered = imfilter(fG, w, ‘replicate’);
fB_filtered = imfilter(fB, w, ‘replicate’);
也可以对这三个图像分量一起处理:
fc_filtered = imfilter(I, w, ‘replicate’);
3.重建滤波过的 RGB图像:
fc_filtered = cat(3, fR_filtered, fG_filtered, fB_filtered)
因为可以在 MATLAB中使用与单色图像相同的语法来执行 RGB图像的线性滤波, 所以可以把前三步合并为一步:
fc_filtered = imfilter(fc, w, ‘replicate’);
编写代码:
rgb_image=imread('D:\数字图像处理\第六章学习\flower6.tif'); %加载彩色图像
fR = rgb_image(:, :, 1); %提取R通道分量图像
fG = rgb_image(:, :, 2); %提取G通道分量图像
fB = rgb_image(:, :, 3); %提取B通道分量图像
subplot(2, 2, 1), imshow(rgb_image);title('(a)原图像');
subplot(2, 2, 2), imshow(fR);title('(b)红色分量图');
subplot(2, 2, 3), imshow(fG);title('(c) 绿色分量图');
subplot(2, 2, 4), imshow(fB) ;title('(d)蓝色分量图');
代码运行效果如下:
接下来,用尺寸为 25×25 像素的相同滤波器滤波亮度分量。平均滤波器已足够大,可以产生有意义的模糊度。选择这个尺寸的滤波器,是为了演示在 RGB 空间中进行平滑处理的效果,与在 RGB 空间被变换到 HSI 空间后,只使用图像的亮度分量达到类似结果之间的不同之处。
编写代码:
rgb_image=imread('D:\数字图像处理\第六章学习\flower6.tif');
fR = rgb_image(:, :, 1);
fG = rgb_image(:, :, 2);
fB = rgb_image(:, :, 3);
w = fspecial('average', 25);
fR_filtered = imfilter(fR, w, 'replicate'); %平滑红色分量图像
fG_filtered = imfilter(fG, w, 'replicate'); %平滑绿色分量图像
fB_filtered = imfilter(fB, w, 'replicate'); %平滑蓝色分量图像
fc_filtered = cat(3,fR_filtered,fG_filtered,fB_filtered); %将这四个句子可以改为:fc_filtered = imfilter(f, w, 'replicate');
subplot(1,2,1);imshow(rgb_image);title('(a)RGB图像');
subplot(1,2,2);imshow(fc_filtered,'Border','tight');title('(b)平滑 R、G、B 图像平面得到的 RGB 图像');
代码运行效果如下:
编写代码:
fc=imread('D:\数字图像处理\第六章学习\flower6.tif');
h = rgb2hsi(fc);
H = h(:, :, 1);
S = h(:, :, 2);
I = h(:, :, 3);
w = fspecial('average', 25);
I_filtered = imfilter(I, w, 'replicate');
h=cat(3,H,S,I_filtered); %cat函数是拼接数组的函数,这里将在第3维上进行拼接。
f=hsi2rgb(h);
subplot(1,2,1);imshow(fc);title('(c)RGB图像');
subplot(1,2,2);imshow(f);title('(d)仅对HIS相等图像的亮度分量进行平滑的结果');
代码运行效果如下:
编写代码:
fc=imread('D:\数字图像处理\第六章学习\flower6.tif');
h = rgb2hsi(fc);
H = h(:, :, 1);
S = h(:, :, 2);
I = h(:, :, 3);
w = fspecial('average', 25);
H_filtered = imfilter(H, w, 'replicate');
S_filtered = imfilter(S, w, 'replicate');
I_filtered = imfilter(I, w, 'replicate');
h=cat(3,H_filtered,S_filtered,I_filtered); %构造多维数组,即合并3分量图像为一副彩色图像
f=hsi2rgb(h);
subplot(1,2,1);imshow(fc);title('(e)RGB图像');
subplot(1,2,2);imshow(f);title('(f)平滑所有三个 HIS 分量的结果 ');
代码运行效果如下:
实验总结:
显然,滤波后的两种结果不同。例如,除图像有点模糊以外,图 (d)中花朵顶部出现模糊的绿色边缘。原因是通过平滑处理,亮度分量值的变化减少了