图像预处理

图像预处理

  图像的颜色主要是由红(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('区域选择处理')

显示结果:

 

              

 

posted @ 2023-04-03 13:30  夏沫゛烟雨  阅读(135)  评论(0编辑  收藏  举报