《数字图像处理》 –冈萨雷斯 第六章学习笔记
MATLAB中彩色图像的表示方法
RGB 图像
数据类型为double 型
rgb_image = cat(3, fR, fG, fB)
其中fR,fG和fB分别代表三种RGB分量图像
RGB彩色空间常常用一个RGB彩色立方体加以图解展示。
>> rgbcube(5, 5, 10)
索引图像
索引图像有两个分量,即整数的数据矩阵X和
imapprox函数
[Y, newmap] = imapprox(X, map, n)
指定一幅彩色图
>> map(k, :) = [r(k) g(k) b(k)]
更换背景颜色
>> whitebg = ('g')
(三种表达)
IPT函数
dither函数
bw = dither(gray_image)
抖动后的结果为二值图像
grayslice函数
X = grayslice(gray_image, n)
该函数通过赋给 gray_image 一个阈值来生成一幅索引图像
gray2ind函数
[X, map] = gray2ind(gray_image, n)
该函数执行必要的缩放
ind2gray函数
gray_image = ind2gray(X, map)
该函数把一幅由X和map构成的索引图像转换成一幅灰度图像。
rgb2ind函数
[X, map] = rgb2ind(rgb_image, n, dither_options)
其中,n决定map的长度,dither_option可以有一个或两个值:’dither’执行抖动,’nodither’将原图像上的每一种颜色映射到新图像上与其最接近的颜色,不执行抖动。
rgb2gray函数
gray_image = ind2rgb(X, map)
该函数将一幅RGB图像转换成一幅灰度图像.
例:
1234567891011121314151617>> f = imread('https://raw.githubusercontent.com/Cristal-yin/MarkdownPhotos/master/images/secondAssignment/iris.jpg');[x1, map1] = rgb2ind(f, 8, 'nodither');[x2, map2] = rgb2ind(f, 8, 'dither');b = ind2rgb(x1, map1);c = ind2rgb(x2, map2);g = rgb2gray(f);g1 = dither(g);subplot(1, 5, 1);imshow(f);subplot(1, 5, 2);imshow(b);subplot(1, 5, 3);imshow(c);subplot(1, 5, 4);imshow(g);subplot(1, 5, 5);imshow(g1);图片:
转换至其他彩色空间
NTSC彩色空间
主要优势:灰度信息和彩色信息是分离的
在此制式中,图像数据是由三部分组成
- 亮度(Y)
- 色度(I)
- 饱和度(Q)
函数rgb2ntsc、ntsc2rgb
rgb2ntsc 输出的图像是double类 , 输入的图像可以是 uint8、uint16或double类
ntsc2rgb 输入、输出的图像都是double 类
12345678910111213141516171819>> f = imread('Triangle.tif');>> yiq = rgb2ntsc(f);>> rgb = ntsc2rgb(yiq);>> subplot(1, 5, 1);>> imshow(rgb);>> title('原图');>> subplot(1, 5, 2);>> imshow(yiq);>> title('YIQ');>> subplot(1, 5, 3);>> figure, imshow(yiq(:, :, 1));>> imshow(yiq(:, :, 1));>> title('亮度');>> subplot(1, 5, 4);>> imshow(yiq(:, :, 2));>> title('色度');>> subplot(1, 5, 5);>> imshow(yiq(:, :, 3));>> title('饱和度');
实例图像:
YCbCr 彩色空间
函数ycbCr2rgb、rgb2ycbcr
两个函数的输入图像都可以是uint8、uint16或者double类,输出图像和输入图像的类相同。
123>> f = imread('Triangle.tif');>> ycb = rgb2ycbcr(f);>> rgb = ycbCr2rgb(ycb);HSV彩色空间 (色调、饱和度、数值)
函数rgb2hsv、hsv2rgb
rgb2hsv 输入图像可以是 uint8、 uint16或double类,输出图像是double类;hsv2rgb 输入图像必须是 double 类 ,输出图像也是。
123>> f = imread('Triangle.tif');>> ycb = rgb2ycbcr(f);>> rgb = ycbCr2rgb(ycb);CMY 和 CMYK 彩色空间
函数imcomplement
HSI 彩色空间(色度、饱和度、亮度)
rgb2hsi.m
123456789101112131415161718192021222324252627282930313233343536function hsi = rgb2hsi(rgb)rgb = im2double (rgb);r = rgb(:, :, 1);g = rgb(:, :, 2);b = rgb(:, :, 3);num = 0.5 * ((r - g) + (r - b));den = sqrt( (r - g).^2 + (r - b).* (g - b));theta = acos(num./(den +eps));H = theta;H(b > g) = 2*pi - H(b > g);H = H/(2*pi);num = min(min(r, g), b);den = r + g + b;den(den == 0) = eps;S = 1 - 3.* num ./ den;H (S == 0) = 0;I = (r + g + b)/3;hsi = cat(3, H, S, I);subplot(3, 3, 1);imshow(rgb),title('rgb');subplot(3, 3, 2);imshow(hsi),title('hsi');subplot(3, 3, 4);imshow(r),title('r');subplot(3, 3, 5);imshow(g),title('g');subplot(3, 3, 6);imshow(b),title('b');subplot(3, 3, 7);imshow(H),title('h');subplot(3, 3, 8);imshow(S),title('s');subplot(3, 3, 9);imshow(I),title('i');
彩色图像的处理基础
- 颜色变换(彩色映射)
- 单独彩色平面的空间处理
- 颜色向量处理
彩色变换
ice函数
12>> f = imread('breast.tif');>> g = ice('image', f);
伪彩色映射
单色和彩色对比度增强
彩色平衡
1>> f2 = ice('image', f1, 'space', 'CMY');
彩色图像的空间滤波
图像平滑和图像锐化
彩色图像平滑
单色图像的平滑(空间平均)可以通过空间掩模中的相应系数(全是1)去
乘所有像素的值,并用掩模中元素的总数去除来实现。
用邻域平均的平滑可以在独立分量的基础上进行。
使用线性空间滤波器平滑RGB彩色图像fc
123fR = fc(:, :, 1), fG = fc(:, :, 2), fB = fc(:, :, 3);fR_filtered = imfilter(fR, w);fc_filtered = imfilter(fc, w);此方法将RGB图像三幅分量图像提取出来,分别进行分量图像滤波,最后重建滤波。
12三步合一:fc_filtered = imfilter(fc, w);RGB图像及其分量图像
1234567f = imread('iris.tif');fR = f(:, :, 1);fG = f(:, :, 2);fB = f(:, :, 3);图片:
HSI分量图像
平滑后图像
彩色图像锐化
拉普拉斯算子
1234>> w = fspecial('average',5);>> fa = imfilter(f, w, 'replicate');>> lapmask = [1 1 1; 1 -8 1; 1 1 1];>> fen = imsubtract(fa, imfilter(fa, lapmask, 'replicate'));图片:
在RGB向量空间直接处理
彩色边缘检测和区域分割
使用梯度的彩色边缘检测
函数colorgrad实现RGB图像的彩色梯度
f 是一幅RGB图像,T是范围[0, 1]内的一个可选阈值;
VG 是RGB 向量梯度,A是以弧度计的角度,用于实现RGB的彩色梯度
PPG是对单独彩色平面的二维梯度求和形成的梯度
1234>> r = f(:,:,1);>> g = f(:,:,2);>> b = f(:,:,3);>> [VG, A, PPG] = colorgrad(f);图片:
RGB向量空间中的图像分割
分割是把一幅图像分成一些区域的处理
使用RGB彩色向量进行分割
函数colorseg