0%

Image-Algorithm-Summarize

YUV、RGB、HSV

YUV:亮度信息 即灰度值。UV:色彩信息 定义了颜色的两个方面-色调与饱和度,分别用Cr和CB来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而CB反映的是RGB输入信号蓝色部分与RGB信号亮度值之同的差异。通过运算,YUV三分量可以还原出R(红),G(绿),B(蓝)。

HSV: 色调(H),饱和度(S),明度(V)

相互转换

ARGB -> RGB

1
2
3
4
5
6
7
8
//unsigned char *data 存的是ARGB的裸数据;

cv::Mat argbImg;
cv::Mat rgbImg(cy, cx,CV_8UC3);
yuvImg.create(cy, cx, CV_8UC4);
memcpy(argbImg.data, data, len);
cv::cvtColor(argbImg, rgbImg, CV_RGBA2RGB);
flip(rgbImg, rgbImg, 0); //垂直翻转

YUV -> RGB

1
2
3
4
5
6
7
//unsigned char *data 存的是YUYV的裸数据;

cv::Mat yuvImg;
cv::Mat rgbImg(cy, cx,CV_8UC3);
yuvImg.create(cy , cx, CV_8UC2);
memcpy(yuvImg.data, data, len);
cv::cvtColor(yuvImg, rgbImg, CV_YUV2BGR_YUYV);

I420 -> RGB

1
2
3
4
5
6
7
//unsigned char *data 存的是I420的裸数据;

cv::Mat yuvImg;
cv::Mat rgbImg(cy, cx,CV_8UC3);
yuvImg.create(cy * 3/2, cx, CV_8UC1);
memcpy(yuvImg.data, data, len);
cv::cvtColor(yuvImg, rgbImg, CV_YUV2BGR_I420);

OpenCV提供的转换函数实现YUV到RGB的转换:

1
2
3
4
5
6
7
8
9
bool YV12ToBGR24_OpenCV(unsigned char* pYUV,unsigned char* pBGR24,int width,int height) 
{
if (width < 1 || height < 1 || pYUV == NULL || pBGR24 == NULL)
return false;
Mat dst(height,width,CV_8UC3,pBGR24);
Mat src(height + height/2,width,CV_8UC1,pYUV);
cvtColor(src,dst,CV_YUV2BGR_YV12);
return true;
}

RGB -> HSV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# -*- coding:utf-8 -*-

import cv2

"""
功能:读取一张图片,显示出来,并转化为HSV色彩空间
"""
image = cv2.imread('images/my_wife2.jpg') # 根据路径读取一张图片
cv2.imshow("BGR", image) # 显示图片


# 转化图片到HSV色彩空间
dst = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cv2.imshow("HSV", dst) # 显示图片
cv2.waitKey(0) # 等待键盘触发事件,释放窗口

White Balance

概念

相机的白平衡控制,是为了让实际环境中白色的物体在你拍摄的画面中也呈现出“真正”的白色。不同性质的光源会在画面中产生不同的色彩倾向,比如说,蜡烛的光线会使画面偏橘黄色,而黄昏过后的光线则会为景物披上一层蓝色的冷调。而我们的视觉系统会自动对不同的光线作出补偿,所以无论在暖调还是冷调的光线环境下,我们看一张白纸永远还是白色的。但相机则不然,它只会直接记录呈现在它面前的色彩,这就会导致画面色彩偏暖或偏冷。

实现

开暖光灯:YUV -> RGB -> SV ,全图SV值S需在0~0.1之间,V需在90~255之间。

IR-Cut

概念

自然界存在着各种波长的光线,通过折射人眼能看到不同颜色的光线,这就是光线的波长不同所导致的。其实还有许多光线是人眼看不到的,人眼识别光线的波长范围在320nm-760nm之间, 超过760nm的光线人眼就无法见到,比如红外光等。
随着科学的进步,人类发明了摄像机,理论上讲摄像机可以看到绝大部分波长的光线,但在摄像机的使用过程中就出现了一个问题,由于各种光线的参杂,摄像机看到的物体反映在监视器上与人眼直接看到的就变样了。如人眼看到绿色,通过摄像机则变成蓝色,产生彩色失真。过去,为解决色彩失真问题,一般在CCD前贴有一低通滤片,该滤片阻碍了红外光的进出,故白天彩色不失真,但夜间却没有了夜视功能。
IR CUT是一种机械装置,内有两个窗口,一为低通滤片一为透明玻璃,可依需要左右移动,从而白天彩色不失真,且夜间仍有夜视功能。简单的说,通过IR CUT,白天只允许760nm或780nm以下波长的光线进入,避免了白天的彩色失真。晚上只允许760nm或780nm以上波长的红外光线进入,避免760nm或780nm以下波长的可见光对红外光的干扰,于是在白天与夜晚都能取得最佳视觉效果。随着技术的进步,IR CUT结合低通滤片与高通滤片在改进夜视摄像机的性能上发挥越来越重要的作用.低通滤片:以镀膜方式使光线中波长在760nm或780nm以下的光线通过,超过760nm或780nm波长的光线阻止通过。高通滤片:以镀膜方式使光线中波长在760nm或780nm以下的光线阻止通过,只准超过760nm或780nm以上波长的光线通过。
根据上述分析,应用低通滤片技术,摄像机能够模拟人的眼睛,只接收同样范围波长的光线,这样就解决了摄像机的色彩失真问题。而通过高通滤片技术的应用,解决了在夜间杂光干扰红外光问题。LED红外技术的出现,大大拓宽了监控领域的时空范畴,红外摄像机得到了广泛的应用。但同时,我们也发现市场上流行的传统LED红外摄像机存在着许多致命的缺陷:如散热问题、寿命问题、手电筒效应问题,夜晚可见光干扰的问题等。LED Array 技术解决了寿命问题,新一代的LED Array技术基本解决了“手电筒”效应,而IR CUT技术完美地解决了杂光干扰。

实现

关、开滤光片,打开红外灯,计算平均亮度是否符合要求(155~255之间)。

Bad Pixel

概念

图像坏点(Bad pixel) : 图像传感器上光线采集点(像素点)所形成的阵列存在工艺上的缺陷,或光信号进行转化为电信号的过程中出现错误,从而会造成图像上像素信息错误,导致图像中的像素值不准确,这些有缺陷的像素即为图像坏点。

实现

根据灰度值确定坏点

Shading

概念

暗角一词属于摄影术语。对着亮度均匀景物,画面四角有变暗的现象,叫做“失光”,俗称“暗角”。

产生暗角的原因主要有:

1.边角的成像光线与镜头光轴有较大的夹角,是造成边角失光的主要原因。沿着视场边缘的光线的前进方向看光圈,由于光线与光圈所在的平面有夹角,看到的光圈是椭圆的,所以通光面积减小。镜头光心到胶片的边缘距离较大,同样的光圈直径到达底片的光线夹角较小,亮度必然减小。同理,同样的光线偏角,对于边角光线位移较大,等价于照在较大的面积上。而面积是与位移的平方成正比的,所以综合上述原因,边缘亮度与光线和光轴夹角的COS值的4次方成正比。换句话说,广角镜头边缘亮度随着视角变大急剧下降。

2.长焦镜头尤其是变焦长焦镜头镜片很多,偏离光圈比较远的镜片为了能让边角光线通过,这些镜片必须很大。为了降低成本,缩小了这些镜片直径,造成边角成像光线不能完全通过,降低了边角的亮度。

3.边角的像差较大。为了提高像质,某些镜片的边缘或专门设置的光阑有意挡住部分影响成像质量的边缘光线,造成边角失光。

鱼眼镜头虽然视角极大,但是由于边缘放大倍率很小,所以几乎没有边角失光。

高档变焦镜头已经花了大的成本,可以加大某些镜片、完美地校正像差,高档长焦镜头包括变焦镜头边缘失光很小。

还有:广角镜头如果使用了过多的滤色镜,等价于增长了镜筒,可能造成边角暗角甚至黑角!

暗角在任何一只镜头上都存在,在MTF透光率图上可以知道,从中心到边缘会损失不少,尤其在大光圈。在冲扩负片是问题不大,因为放大头也存在这个问题,会抵消掉一部分影响,当然,如果镜头太滥,失光极其明显,那就能在照片上看出来了。

对于反转片,问题就严重一些,就需要仔细研究研究了,一般的现象是:广角比长焦明显一些,反正怎么样全看你的使用情况,缩小一下光圈就是了。

— from baike.baidu.com

实现

开冷光灯:分为亮度暗角和色彩暗角。

亮度暗角:取四个角(10 * 10像素),四个角亮度与中间块做比值,需在0.3~1之间。

色彩暗角:图像被分成20 * 20块,算每块的R/G、B/G,分别除以中心的R/G,四个角比值都应在0.8~1.2之间。

清晰度测试

清晰度:影像细部影纹及边界的清晰程度,摄像机一般使用分解力来衡量它分解被摄景物细节的能力,单位有TVLine、4K分辨率、8K分辨率

衡量分解力的三个标准:

  1. TVLine检测(锲形线测试),用于主观测试,ISO 12233 chart读出的线对数

  2. MTF检测(频率线测试),调制传递函数,调制度随空间频率变化的函数,镜头的MTF曲线表明镜头的能力。

    MTF计算线对间最亮和最暗线对的对比度

    MTF = (最大亮度 - 最小亮度) / (最大亮度 + 最小亮度)

    测不用频率下的MTF值,通过将这些值和空间频率进行一一对照。

  3. SFR检测(spatial frequency response)用于测量随着空间频率的线条增加对单一影像所造成的影响。SFR是MTF的另一种测试方法。SFR最终是希望得到MTF曲线。

    SFR不需拍不同空间频率下的线对。只需一个黑白刀口(斜边),即可换算约略相等于所有空间频率下的MTF。

    斜边 -> 超采样 -> 得到黑白变换的直线(ESF) -> 求导 -> 直线变换率 -> FFT变换 -> 各个频率下的MTF值