彩色图像处理

MATLAB中彩色图像的表示

RGB图像

一幅RGB图像一幅RGB图像是一个M×N×3的彩色像素数组,其中每个色彩像素是一个三值组,这三个值分别对应一个特定空间位置处该RGB图像的红,绿,蓝分量。
令fR,fG,fB分别表示三幅RGB分量图像,一幅RGB图像就是使用cat(连接)运算符通过堆叠这些分量图像形成的:

rgb_image = cat(3,fR,fG,fB)

该运算中,要求图像按顺序放置。
用下面的命令提取三幅分量图像:

fR = rgb_image(:,:,1);
fG = rgb_image(:,:,2);
fB = rgb_image(:,:,3);
>> subplot(141),imshow(f);
>> subplot(142),imshow(fR);
>> subplot(143),imshow(fG);
>> subplot(144),imshow(fB);

image
一幅图像和它的三个分量

RGB色彩空间通常以图解方式显示为一个RGB色彩立方体。
可以使用自定义函数rgbcube来查看彩色立方体:

rgbcube(vx, vy, vz)

image

索引图像

索引图像有两个分量:一个整数数据矩阵X和一个彩色映射矩阵map。矩阵map是一个大小为m×3的double类数组。
矩阵X中的每个像素值对应着map中的一个颜色,从而形成一种映射关系,构成了索引图象。
显示索引图像,可以写作:

>> imshow(X, map)

或者

>> image(X)
>> colormap(map)

处理RGB和索引图像的函数

函数dither

这个函数采用抖动从RGB图像创建索引图像

>> gR=dither(fR);

将RGB图像的一个分量当作灰度图像,进行抖动处理。效果图如下
image
image

函数grayslice

采用阈值处理从灰度图像创建索引图像
下面是效果图
image

彩色空间转换

颜色基本概念

  • 亮度

明亮程度,光作用于人眼时所引起的明亮程度不同。
它与被观察物体的发光强度有关,强度大小,决定我们的感觉亮或暗。
如果彩色光的强度降到使人们看不到了,在亮度这个分量上他就以黑色对应,如果其强度变得很大,那么亮度就以白色对应。亮度是非彩色的属性,它描述亮还是暗,彩色图象中的亮度对应于黑白图象中的灰度。
对同一物体照射的光越强,反射光也越强,则越亮。
对不同物体在相同照射情况下,发射越强者看起来越亮。(例如:镜子的反射)
亮度还与人类视觉系统的视觉敏感函数相关,即使强度相同,不同颜色的光当照射同一物体时也会产生不同的亮度。

  • 色调

明亮程度,光作用于人眼时所引起的明亮程度不同。
它与被观察物体的发光强度有关,强度大小,决定我们的感觉亮或暗。
如果彩色光的强度降到使人们看不到了,在亮度这个分量上他就以黑色对应,如果其强度变得很大,那么亮度就以白色对应。亮度是非彩色的属性,它描述亮还是暗,彩色图象中的亮度对应于黑白图象中的灰度。
对同一物体照射的光越强,反射光也越强,则越亮。
对不同物体在相同照射情况下,发射越强者看起来越亮。(例如:镜子的反射)
亮度还与人类视觉系统的视觉敏感函数相关,即使强度相同,不同颜色的光当照射同一物体时也会产生不同的亮度。

  • 饱和度

饱和度是指颜色的纯度即掺入白光的程度。
饱和度(saturation)是颜色的另一个属性,它描述纯颜色用白色冲淡的程度,高饱和度的颜色含有较少的白色。
饱和度也是可以指颜色的深浅程度。对于同一个色调的彩色光,饱和度越深颜色越鲜明或者说越纯。
例如:当红色加进白光之后冲淡为粉红色,其基本色调还是红色,但饱和度降低;也就是说,淡色的饱和度比鲜艳的颜色要低一些。
饱和度还和亮度有关,如果在就饱和的彩色光中加入白光的成分,增加了光的强度,会变得更亮,但它的饱和度降低了。如果在某色调的彩色光中,掺入别的彩色光,则会引起色调的变化,既基本的颜色变了,只有掺入白光时,仅仅引起饱和度的变化。

  • 色度

通常,把色调和饱和度称为色度,则亮度表示某彩色光的明亮程度,色度表示颜色的类别和深浅程度。

NTSC彩色空间

主要用于电视信号传送,兼容黑白和彩色两种模式。由YIQ三部分组成。
image
YIQ分量是由一幅图像的RGB分量变换得到的。
可以使用rgb2ntsc函数从RGB转换到NTSC,使用ntsc2rgb从NTSC转换到RGB。
RGB图像
image
NTSC图像
image
其余彩色空间类似NTSC,可以使用工具箱函数互相转换。

彩色图像处理基础

彩色图像处理可以细分为三个领域:

  • 彩色变换(彩色映射)
  • 各个彩色平面的空间处理
  • 彩色向量处理

彩色变换

在这里,使用了自定义函数ice(交互颜色编辑)。
其语法为

g = ice(\'Property Name\', \'Property Value\',...)

其中,Property Nmae和Property Value必须成对出现,且这些点指明了输入对组成的重复模式。
image
具体函数代码见M函数文件夹。
PS:这个函数没调试通过,所以没有效果图,MATLAB文件导入部分出了故障,需要继续调试一下。

彩色图像的空间滤波

彩色图像平滑

可以使用imfilter函数。运行如下代码

>> f=imread(\'5-1-1.jpg\');
>> fR=f(:,:,1);
>> fG=f(:,:,2);
>> fB=f(:,:,3);
>> w=fspecial(\'average\',25);
>> gR=imfilter(fR,w,\'replicate\');
>> gG=imfilter(fG,w,\'replicate\');
>> gB=imfilter(fB,w,\'replicate\');
>> g=cat(3,gR,gG,gB);
>> imshow(g)

也可运行

g=imfilter(f,w,\'replicate\');

效果如下
image
image

彩色图像锐化

为了锐化图像,使用了拉普拉斯滤波器模板。
运行如下代码:

>> lapmask = [1 1 1;1 -8 1;1 1 1];
>> f=tofloat(f);
>> fen=f-imfilter(f,lapmask,\'replicate\');
>> imshow(fen)

效果如下
image
image

直接在RGB向量空间的处理

使用梯度进行彩色边缘检测

[VG,A,PPG] = colorgrad(f,T)

其中,f是RGB图像,T是区间[0,1]内的一个可选阈值(默认为0);VG是RGB向量梯度Fθ(x, y);A是以弧度计的角度θ(x, y),PPG是由单独彩色平面的二维梯度之和形成的梯度图像。计算上述方程时,要求全部微分都可用函数clorgrad中的Sobel算子来实现。输出VG和PPG通过clorgrad被归一化到区间[0, 1],且它们经过了阈值处理。所以,它们的值小于或等于T,VG(x,y)=0;对于其他的情况,VG(x,y) = VG(x,y)。类似的解释可用于PPG。

运行代码

>> [VG, A, PPG] = colorgrad(f);
>> imshow(VG)
>> imshow(A)
>> imshow(PPG)

效果如下
image
image
image
image

在RGB向量空间中进行图像分割

使用自定义函数colorseg,函数代码见M函数文件夹。
该函数的语法为

S = colorseg(method,f,T,parameters)

运行测试代码

mask = roipoly(f); % Select region interactively.
red = immultiply(mask, f(:, :, 1));
green = immultiply(mask, f(:, :, 2));
blue = immultiply(mask, f(:, :, 3));
g = cat(3, red, green, blue);
figure, imshow(g);

效果如下
image
image

版权声明:本文为magicalzh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/magicalzh/p/9273330.html