介绍
红外热像仪在采集图像时由于ADC、放大电路、读出电路的影响,会产生非均匀的竖条纹噪声,大部分人的做法是对红外机芯做标定,也就是两点校正和单点校正。
但是也存在校正后还会出现竖条纹噪声的情况,可能是由于硬件性能的影响,或者是温漂的影响,再或者是被摄物体温度范围超出标定范围,积分时间不匹配等等原因。
出现竖条纹噪声会影响使用者的观感,一般会采用单点校正来使画面变得均匀,但毕竟单点校正只对像元变化的偏置做改变,而没有对斜率还是之前的,所以再换环境后依旧会出现竖条纹。当然也可以使用基于场景的非均匀校正,已经有好多人介绍过了。
我看到Effective Strip Noise Removal for Low-Textured Infrared Images Based on 1-D Guided Filtering这篇文章,就尝试用python实现了一下
python实现一维引导滤波去除竖条纹
对8bit的红外图像进行竖条纹噪声去除
#定义函数
import numpy as np
import cv2
import matplotlib.pyplot as plt
def Normalize_img(img):
min_n = np.min(img)
max_n = np.max(img)
Normalize_image = ((img-min_n)/(max_n-min_n))
return Normalize_image
def guideFilter(I, p, winSize, eps):
mean_I = cv2.blur(I, winSize) # I的均值平滑
mean_p = cv2.blur(p, winSize) # p的均值平滑
mean_II = cv2.blur(I * I, winSize) # I*I的均值平滑
mean_Ip = cv2.blur(I * p, winSize) # I*p的均值平滑
var_I = mean_II - mean_I * mean_I # 方差
cov_Ip = mean_Ip