图像预处理
图像预处理
图像的颜色主要是由红(R)、绿(G)和蓝(B)三原色光按比例混合而成。一副图像(RGB图形)由格式为M×N×3的三维数组组成,其中的“3”可以理解为三幅M×N的二维图像(灰度值图像)。这三幅图像分别代表R、G、B分量,每个分量的像素点取值范围是[0,255]。读取的图像格式可以是png,bmp等。
一、读取图像函数imread
用法:RGB = imread(filename.fmt) 根据图像名filename读取图像。返回的RGB为包含图像数据的数组。
若为灰色图像,RGB是M*N的数组;若为真彩图像,RGB是M*N*3的三维数组。(M*N为图像像素)
对于彩色图像,返回的数据中,RGB(:,:,1)表示R分量,RGB(:,:,2)表示G分量,RGB(:,:,3)表示B分量,每个分量是一个M*N的数组,数组中每个数据取值范围为[0,255]。
二、图形显示函数imshow
用法:imshow(A):显示图像A,A应该为一个M*N或者M*N*3的数组。
三、显示RGB图像的三个分量
有两种方法可以将RGB图像的三个分量分别显示出来,但显示效果不一样:
- 灰度值显示法
该方法比较简单,通过提取R、G、B分量,再分别显示出来,matlab代码如下:clc,clear,close all RGB = imread('coloredChips.png'); subplot(2,2,1),imshow(RGB(:,:,1)),title('R分量'); %显示R分量 subplot(2,2,2),imshow(RGB(:,:,2)),title('G分量'); %显示G分量 subplot(2,2,3),imshow(RGB(:,:,3)),title('B分量'); %显示B分量 subplot(2,2,4),imshow(RGB),title('RGB'); %显示RGB图像(原始图像)
显示结果
-
- 彩色显示法
只有当RGB的三个通道同时被赋值时才会显示颜色,如R分量显示出红色,matlab代码如下:
clc,clear,close all RGB = imread('coloredChips.png'); zeromatrix = zeros(391, 518); %创建一个M*N的零矩阵(与像素大小相同的空矩阵) RGB_R = cat(3, RGB (:,:,1), zeromatrix , zeromatrix );%创建一个三维数组,提取R分量,其他两个分量取0 RGB_G = cat(3, zeromatrix , RGB (:,:,2), zeromatrix );%创建一个三维数组,提取G分量,其他两个分量取0 RGB_B = cat(3, zeromatrix , zeromatrix, RGB (:,:,3));%创建一个三维数组,提取B分量,其他两个分量取0 subplot(2,2,1),imshow(RGB_R ),title('R分量'); subplot(2,2,2),imshow(RGB_G),title('G分量'); subplot(2,2,3),imshow(RGB_B),title('B分量'); subplot(2,2,4),imshow(RGB),title('RGB');
显示结果:
四、灰度图像
灰度图像转换函数rgb2gray
用法:I = rgb2gray(RGB) 。将真彩色图像 RGB 转换为灰度图像 I。rgb2gray 函数通过消除色调和饱和度信息,同时保留亮度,来将 RGB 图像转换为灰度图l。l是一个M*N的矩阵,数据取值范围为[0,255],主要表示亮度强弱。
五、二值化图像
二值化函数im2bw
im2bw使用阈值变换法把灰度图像转换成二值图像。所谓二值图像, 一般意义上是指只有纯黑(0)、纯白(255)两种颜色的图像。
用法:BW = im2bw(I,level)
将灰度图像 I 转换为二进制图像。输出图像 BW 将输入图像中亮度值大于 level 的像素替换为值1 (白色),其他替换为值0(黑色)。 level 的取值在 [0,1]之间,默认为 0.5。
区域二值化函数roicolor
用法:BW=roicolor(l,low,high)
将灰度图像 I 转换为二进制图像。输出图像 BW 将输入图像中亮度值在[low,high]范围内的像素替换为值1 (白色),其他替换为值0(黑色)。
BW=roicolor(A,v)
将灰度图像 I 转换为二进制图像。输出图像 BW 将输入图像中亮度值与向量v相匹配的像素替换为值1 (白色),其他替换为值0(黑色)。
六、应用举例
%% 图像预处理 clc,clear,close all obj=imread('coloredChips.png'); %读图像 R = obj(:,:,1); %R通道 G = obj(:,:,2); %G通道 B = obj(:,:,3); %B通道 obj_gray = rgb2gray(obj); %灰度图像 BW1 = im2bw(obj_gray,0.49); %二值化 BW2 = roicolor(obj_gray,50,100); %区域二值化 subplot(331),imshow(obj);title('原图像') subplot(332),imshow(obj_gray);title('灰度图像') subplot(333),imshow(BW1);title('二值化图像') subplot(334),imshow(R);title('R通道图像') subplot(335),imshow(G);title('G通道图像') subplot(336),imshow(B);title('B通道图像') subplot(313),imshow(BW2);title('区域选择处理')
显示结果: