zoukankan      html  css  js  c++  java
  • 彩色图像与灰度图像之间的转换

    一.彩色图像简介

    在RGB色彩空间,图像深度与色彩的映射关系主要有真彩色、伪彩色和调配色。

    真彩色是指在组成一幅彩色图像的每个像素值中,有R,G,B三个基色分量,每个基色分量直接决定显示设备的基色强度,这样产生的彩色称为真彩色,是真实的原图彩色。

    伪彩色图像的每个像素值实际上是一个索引值或代码,该代码值作为色彩查找表CLUT中某一项的入口地址,根据该地址可查找出包含实际R,G,B的强度值。这种用查找映射的方法产生的色彩称为伪彩色。色彩查找表CLUT是一个事先做好的表,表项入口地址也称为索引号。彩色图像本身的像素数值和色彩查找表的索引号有一种变换关系,这种关系可以是系统定义的,也可以是用户自己定义的变换关系。使用查找得到的数值显示的彩色是真的,可又不是图像本身的颜色,因为其没有完全反映原图的彩色,所以称其为伪彩色。

    调配色的获取是通过每个像素点的R,G,B分量分别作为单独的索引值进行变换,经相应的色彩查找表找出各自的基色强度,用变换后的R,G,B强度值产生色彩。

    二.灰度图像简介

    灰度是描述灰度图像内容的最直接的视觉特征。它指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图像也称灰度图像。灰度图像矩阵元素的取值通常为[0,255],因此其数据类型一般为8位无符号整数,这就是人们通常所说的256级灰度。

    三.彩色图像转化为灰度图像

    彩色图像转换为灰度图像时,需要计算图像中每个像素有效的亮度值,其计算公式为:

    Y = 0.3R + 0.59G + 0.11B

    代码如下:

    clear all;
    close all;
    
    I = imread('lenna.png');
    [M N H] = size(I);
    I2 = zeros(M, N);
    
    for x = 1 : M
       for y = 1 : N
          A = double([I(x, y, 1) I(x, y, 2) I(x, y, 3)]);
          B = [0.3; 0.59; 0.11];
          [gray] = A * B;                                           % 计算灰度值
          I2(x, y) = gray;
       end
    end
    
    imshow(uint8(I2));
    

    四.灰度图像转换为彩色图像 

    将灰度图像转换为彩色图像,称为灰度图像的伪彩色处理。

    伪彩色处理技术的实现方式有很多,如:灰度分割法、灰度级-彩色变换法、滤波法等等。以下采用的是灰度级-彩色变换法,这是将来自传感器的灰度图像送入三个不同特征的R、G、B变换器,然后将三种变换器的不同输出分别送到彩色显示器进行显示的技术。

    映射关系如下,其中R(x,y)、G(x,y)、B(x,y)分别表示R、G、B通道的颜色值,f(x,y)表示特定点灰度图像的灰度值,f是所选灰度图像的灰度值。

    代码如下:

    clear all;
    close all;
    
    I = imread('lenna.jpg');
    [M N] = size(I);
    I2 = zeros(M, N, 3);
    
    for x = 1 : M
       for y = 1 : N
          if I(x, y) <= 127                                 % R
              I2(x, y, 1) = 0;
          elseif I(x, y) <= 191
              I2(x, y, 1) = 4 * I(x, y) - 510;
          else
              I2(x, y, 1) = 255;
          end
          
          if I(x, y) <= 63                                  % G
              I2(x, y, 2) = 254 - 4 * I(x, y);
          elseif I(x, y) <= 127
              I2(x, y, 2) = 4 * I(x, y) - 254;
          elseif I(x, y) <= 191
              I2(x, y, 2) = 255;
          else
              I2(x, y, 2) = 1022 - 4 * I(x, y);
          end
          
          if I(x, y) <= 63                                 % B
              I2(x, y, 3) = 255;
          elseif I(x, y) <= 127
              I2(x, y, 3) = 510 - 4 * I(x, y);
          else
              I2(x, y, 3) = 0;
          end
       end
    end
    
    imshow(uint8(I2));
    
  • 相关阅读:
    tkinter中text文本与scroll滚动条控件(五)
    tkinter中entry输入控件(四)
    tkinter中button按钮控件(三)
    tkinter中lable标签控件(二)
    tkinter简介(一)
    Pycharm激活方法使用的是(license server)
    教你如何解决WIN 10系统睡眠无法唤醒
    命令查询windows&Linux系统版本信息
    文本溢出显示省略号,CSS未加载时a标签仍可用处理方法
    Vue.js 中的动态路由
  • 原文地址:https://www.cnblogs.com/minisculestep/p/4878894.html
Copyright © 2011-2022 走看看