AI笔记: 计算机视觉之照明模型和颜色模型

照明模型

光通量

  • 人能够看到周围的世界有2个部分构成:外在光源、光源物体表面的情况
  • 光通量是指人眼所能感觉到的辐射功率,它等于单位时间内某一波段的辐射能力和该波段的相对视见率的乘积
  • 以符号表示,单位是lm(流明)
  • 1lm = 0.00146瓦

不同光源的典型值

光源 光通量 说明
太阳 3.566 * 10^28 lm 我们生存的能量来源
烛光 12.56lm (4π) 光通量的定义
白炽灯/卤钨灯 12~24lm / W 卤钨灯效率高于白炽灯
荧光灯和气体放电灯 50~120lm / W 气体放电灯
LED灯 110lm / W

辐照度

  • 辐照度:指投射到一个平面表面上的辐射通量密度(我们能够感受到的光的强弱)。指达到一表平面上,单位时间,单位面积上的辐射能
  • 以符号E表示,通常单位是lux(勒克斯)
  • 1lux = 1lm / m^2

一些典型的辐照度

场景 照度(lux) 说明
黑夜 0.001 ~ 0。02 月夜是0.02 ~ 0.3
阴天室内 5 ~ 50 阴天室外
晴天室内 100 ~ 1000 在做视觉系统时需要进行补光
晴天阳光直射 100000 在做视觉系统时不需要补光
适合阅读 300 ~ 750 阅读书刊时需50~60
家用摄像机标准照度 1400 在做视觉系统时需要补光

常见光源

按照不同分类

  • 方向:直射光、散射光(漫射板)
  • 光谱:可见光、进可见光
  • 其他:偏振、其他

关于背光源

  • 光源从物体的背部照明
  • 特点:发光面是一个散射面,均匀性好。可用于镜面反射材料,如晶片或玻璃基底上的伤痕检测;LED检测,微笑电子元件尺寸、形状、靶标测试

颜色光源

  • 相近颜色过滤(变白或减弱)
  • 互补色加强(变黑或加强)
  • 特点:如果希望更加鲜明地突出某些颜色,则选择色环上相对应的互补颜色光源照明,这样可以明显地提高图像的对比度
  • 例子:PCB板绿色背景,用白光照射,MARK点对比度不够高,容易和背景混淆在一起,难以分辨。绿色背景采用红色光源提高对比度,MARK点清晰可见。

颜色模型

  • RGB模型
  • CMYK模型
  • HSI模型

颜色相关OpenCV的对应实现

1) 颜色空间装换

  • c++实现

    // 第一个参数:输入的图像
    // 第二个参数:转换以后的图像
    // 第三个参数:code: COLOR_BGR2GRAY, COLOR_BGR2HSV 表示在哪两个空间进行转换
    void cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0);
    
  • python实现

    dst = cv.cvtColor(src, code[, dst[,dstCn]])
    

2) 通道分离

  • c++实现

    // 第一个参数:原始多通道的图像
    // 第二个参数:通道分离后的结果,通常是个数组
    void split(const Mat& src, Mat *mvBegin);
    
  • python实现:形如:bgr[:,:,0]表示第0个通道(blue)提取出来

3 ) 示例程序

3.1 Cpp版

#include "opencv2/opencv.hpp"
using namespace cv;

int main(void) {
    char *fn = "D:\\lena.jpg";
    Mat image1 = imread(fn);

    Mat image, gray, hsv, hsvChannels[3];
    pyrDown(image1, image);
    cvtColor(image, gray, COLOR_BGR2GRAY); // 把原始图像转化成灰度图像

    imshow("source image", image);
    imshow("gray", gray);
    waitKey(); // 不加这句话,窗口会闪退

    cvtColor(image, hsv, COLOR_BGR2HSV); // 把原始图像转化成hsv图像
    split(hsv, hsvChannels); // 通过split函数把hsv三个通道分离开来
    imshow("Hue", hsvChannels[0]); // 色度通道
    imshow("Saturation", hsvChannels[1]); // 饱和度通道
    imshow("Value", hsvChannels[2]); // 亮度通道
    waitKey(); 

    return 0;
}

3.2 Python版

import cv2 as cv

filename = r'/Users/johnny/Downloads/1.jpg'
img = cv.imread(filename)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

cv.imshow("source image", img)
cv.imshow("gray", gray)
cv.waitKey()

hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) # 将bgr转化为hsv

# 显示hsv的各个通道
cv.imshow("Hue", hsv[:, :, 0]) # 在最后一维指定通道
cv.imshow("Saturation", hsv[:, :, 1])
cv.imshow("Value", hsv[:, :, 2])
cv.waitKey();

# 显示bgr的各个通道
cv.imshow("Blue", img[:, :, 0])
cv.imshow("Green", img[:, :, 1])
cv.imshow("Red", img[:, :, 2])

cv.waitKey()
cv.destroyAllWindows()
发布了417 篇原创文章 · 获赞 228 · 访问量 70万+

猜你喜欢

转载自blog.csdn.net/Tyro_java/article/details/104448163