极端天气下的目标检测与测距算法

简介: 极端天气下的目标检测与测距算法

代码获取:代码


本文主要工作:

科技的发展与进步促使自动驾驶车辆逐渐成为全球汽车产业发展的重要战略 方向。但自动驾驶车辆面对如:大雨、大雾、大雪等极端环境时,智能汽车图像 采集与处理系统将面临巨大挑战。并且自动驾驶需要实时关注周围物体的威胁, 实时进行目标检测以及精确测量周围目标的距离是提高汽车安全性的可行之策。 本文首先训练出一种天气分类模型,实时识别当下天气情况。其次针对不同天气 情况则采取不同的图像去噪方法来提高图像质量。天气前处理完成后将采取改进 的 Yolo 模型对前方行人、车辆等道路环境目标进行目标检测。最后对目标检测定 位到的物体采用改进目标点的测距方法进行距离测量,为自动驾驶主动安全行为 提供支持。

总结:本文完成了去雾、去雨、去雪,目标检测与车辆距离测量。运用了yoloV3目标检测,单目测距,prescan仿真。本文代码分享与论文撰写相关的同学可以一起交流。如果对你有用,欢迎私聊点赞交流–

本人已做项目清单:

c4ab9a473c8cc5741485d0c80310543f_4a968f6037bd41a89d841d90834d4312.png接下来进入正文,准备发车----------->


1.天气分类


为了实时识别出当下的天气情况,利用卷积神经网络搭建了天气分类模型。 针对搜集到的天气图像数量少且不具代表性的问题,通过改进 mosaic 和图像合成 手段进行数据增强与扩充。为了提升模型精度,将数据集划分成 6 种大小不同的 批尺寸,改进激活函数并引入模型优化方案。最终将数据集输送到天气分类模型 训练后得到了良好的权重系数。该模型可以对实时出现的晴天、雨天、雾天、雪 天四种天气进行识别分类,分类精确度可达 93.46%。


mosic天空区域图像增强:

69edcbdac8891c2b6db4b8f71c3f5eac_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQUxpTGlMaVlh,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center.png


数据增强主要代码部分:


def readxml(image_file):
    if image_file.split(".")[1] == 'png':
        xml_path = os.path.join(path_origin_xml, image_file.replace('png', 'xml'))
    else:
        xml_path = os.path.join(path_origin_xml, image_file.replace('jpg', 'xml'))
    root = ET.parse(xml_path).getroot()
    bb = []
    for obj in root.iter('object'):  # 获取object节点中的name子节点
        bbox = obj.find('bndbox')
        xmin = int(float(bbox.find('xmin').text.strip()))
        ymin = int(float(bbox.find('ymin').text.strip()))
        xmax = int(float(bbox.find('xmax').text.strip()))
        ymax = int(float(bbox.find('ymax').text.strip()))
####-----------------非常重要----------------########  下面的1需要修改     具体修改见链接
        bb.append(np.array([xmin, ymin, xmax, ymax, 1]))
    return np.array(bb)
if __name__ == "__main__":
    lines = []
    for filename in os.listdir(os.path.join(image_path, '')):
        if filename.endswith(".jpg") or filename.endswith(".JPG") or filename.endswith(".png"):
            lines.append(filename)
    print(lines)
    list1 = list(range(0,len(lines)))
    print("list1:",list1)


四种天气数据集:**


image.png


天气分类代码部分:


--------------qq1309399183---------------
data_transforms = {
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}
data_dir = 'data/weather_data'
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),
                                          data_transforms[x])
                  for x in ['train', 'val']}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=4,
                                             shuffle=True, num_workers=4)
              for x in ['train', 'val']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}
class_names = image_datasets['train'].classes
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")


2.极端天气下图像前处理**


(1)去雾*


针对不同的天气则采取不同的图像前处理方法来提升图像质量。雾天天气 时,针对当下求解的透射率会导致去雾结果出现光晕、伪影现象,本文采用加权最小二乘法细化透射率透。针对四叉树法得到的大气光值不精确的问题,改进四叉树法来解决上述问题。将上述得到的透射率和大气光值代入大气散射模型完成去雾处理;下图为去雾前后对比图。

去雾前:

前.png

去雾后:

后.png


去雾关键代码


ef Transmission(src_img):
    temp = np.min(src_img,2)
    r1=1   
    s = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (r1,r1))
    dst = cv2.erode(temp, s)
    h,w=temp.shape
    window=np.zeros((h,w))
    r=1
    for i in range(r,h-r,1):
        for j in range(r,w-r,1):
            window[i-r:i+r+1,j-r:j+r+1]=dst[i-r:i+r+1,j-r:j+r+1]
            sum_=np.sum(window[i-r:i+r+1,j-r:j+r+1])
            devide=sum_/((2*r+1)*(2*r+1))
            window[i-r:i+r,j-r:j+r]=devide
    darkChannel=cv2.dilate(window,np.ones((r1,r1)))
    darkChannel=(1-darkChannel)*255.0
    return darkChannel


(2)去雨*


面对雨天环境则采取主成分分析方法获取雨线图中雨线噪声的大小和形状信息,并将其与自适应阈值进行比较。当满足条件时,利用一种方法将雨线与之邻近的无雨背景层进行关联来达到去雨目的;

去雨流程图:

image.png


去雨关键代码:


ef pre_mark(I,b,g,r):
    w1=w2=7
    K_Left_Up = np.zeros((2*w1-1, 2*w2-1))
    K_Right_Up = np.zeros((2*w1-1, 2*w2-1))
    K_Center = 1/(w1*w2)*np.ones((w1, w2))
    K_Left_Down =np.zeros((2*w1-1, 2*w2-1))
    K_Right_Down = np.zeros((2*w1-1, 2*w2-1))
    K_Left_Up[0:w1, 0:w2] = 1/(w1*w2)*np.ones((w1, w2))
    # print(K_Left_Up.shape)
    K_Right_Up[0:w1,w2-1:2*w2] = 1/(w1*w2)*np.ones((w1, w2))
    # print(K_Right_Up)
    K_Left_Down[w1-1:2*w1, 0:w2] = 1/(w1*w2)*np.ones((w1, w2))
    K_Right_Down[w1-1:2*w1, w2-1:2*w2] = 1/(w1*w2)*np.ones((w1, w2))
    #LU
    b1=scipy.ndimage.filters.convolve(b, K_Left_Up, mode='nearest')
    g1=scipy.ndimage.filters.convolve(g, K_Left_Up, mode='nearest')
    r1=scipy.ndimage.filters.convolve(r, K_Left_Up, mode='nearest')
    I_LU=cv2.merge((b1,g1,r1))
    #RU
    b2=scipy.ndimage.filters.convolve(b, K_Right_Up, mode='nearest')
    g2=scipy.ndimage.filters.convolve(g, K_Right_Up, mode='nearest')
    r2=scipy.ndimage.filters.convolve(r, K_Right_Up, mode='nearest')
    I_RU=cv2.merge((b2,g2,r2))
    #C
    b3=scipy.ndimage.filters.convolve(b, K_Center, mode='nearest')
    g3=scipy.ndimage.filters.convolve(g, K_Center, mode='nearest')
    r3=scipy.ndimage.filters.convolve(r, K_Center, mode='nearest')
    I_C=cv2.merge((b3,g3,r3))
    #LD
    b4=scipy.ndimage.filters.convolve(b, K_Left_Down, mode='nearest')
    g4=scipy.ndimage.filters.convolve(g, K_Left_Down, mode='nearest')
    r4=scipy.ndimage.filters.convolve(r, K_Left_Down, mode='nearest')
    I_LD=cv2.merge((b4,g4,r4))
    #RD
    b5=scipy.ndimage.filters.convolve(b, K_Right_Down, mode='nearest')
    g5=scipy.ndimage.filters.convolve(g, K_Right_Down, mode='nearest')
    r5=scipy.ndimage.filters.convolve(r, K_Right_Down, mode='nearest')
    I_RD=cv2.merge((b5,g5,r5))


去雨结果:


a6b49e856881089c25926bc5de605bb1_f9c0edc1c1d44f2ebc089ec9375c56c8.png


(3)去雪*


雪天天气 时,本文在去雨算法的基础上引入一种图像处理手段,完成对图像中雪斑的进一步处理。通过与经典算法定性以及定量比较,所提算法在结果中具良好的有效性和优越性。

去雪前后对比图:

雪.png


去雪关键代码:


def refine_mark(I):
    T1=0.04
    T2=0.04
    L,num = measure.label(I, neighbors = None, background = None, return_num = True, connectivity = 2)
    Theta_cluster = []
    for i in range(1,num,1):
        b=np.argwhere(L==i)
        h,_=b.shape
        c=b-np.mean(b,0)
        c_T=c.T


3.目标检测**


在图像处理后加入目标检测,提高了目标检测精度以及目标数量。

下图展现了雾天处理后的结果

图第一列为雾霾图像,第二列为没有加入图像处理的目标检测结果图,第三列为去雾后的目标检测结果图。


前处理前后目标检测效果对比


6fb40a69ef0d3b1a837e329de9f4346d_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQUxpTGlMaVlh,size_13,color_FFFFFF,t_70,g_se,x_16#pic_center.png


4.测距研究**


为了得到距离,进行了precan仿真验证。并完成10-100m的图像采集,利用测距模型进行测量。在prescan进行了如下操作。


Prescan单目测距仿真研究


418f3cff47c6bd62fe2c37350ba6801a_f11757d07de34d659b9137bcb33facba.png

上图采集到的目标框将可以用于自己模型的计算验证。


精确的对目标进行测距可以提高汽车安全性能。为了测量出目标检测得到的物体距离,本文首先完成了世界坐标到图像坐标系的公式推导,标定了相机内外参数。针对当下侧向物体测距时测量精确度不高的问题,进行了改进。得到了以下结果:

478ec98bb498fd4ca3d01d0171c61e50_f8d2beb42e43456799be5217e4410c88.png


5 总结


code:-----qq 1309399183----


本文完成了去雾、去雨、去雪,目标检测与车辆距离测量。运用了yoloV3目标检测,单目测距,prescan仿真。

#需要代码分享与论文撰写相关的同学可以一起交流。如果对你有用,欢迎私聊点赞交流–


相关文章
|
13天前
|
运维 算法 安全
异常检测算法及其在安全领域的应用
【6月更文挑战第4天】在数字化时代,数据安全至关重要,异常检测算法扮演着守护者角色。它能自动学习正常行为模式,及时发现网络攻击和欺诈行为。非监督式异常检测算法尤其重要,如基于距离的方法,通过计算数据点间距离识别偏离常规的点。Python的scikit-learn库可实现这一算法。异常检测不仅应用于金融领域的欺诈检测,还广泛用于工业监控、医疗诊断和社交媒体分析,为多领域数据安全提供保障。随着技术进步,异常检测将更智能、高效,成为数据安全的重要防线。
29 2
|
26天前
|
算法 计算机视觉
YOLOv3 的非极大值抑制(NMS)算法是如何工作的,它对最终检测结果有何影响?
YOLOv3 的非极大值抑制(NMS)算法是如何工作的,它对最终检测结果有何影响?
|
26天前
|
监控 算法 自动驾驶
主流的目标检测算法是那种?
主流的目标检测算法是那种?
|
1天前
|
算法 JavaScript 前端开发
在JavaScript中实现基本的碰撞检测算法,我们通常会用到矩形碰撞检测,也就是AABB(Axis-Aligned Bounding Box)碰撞检测
【6月更文挑战第16天】JavaScript中的基本碰撞检测涉及AABB(轴对齐边界框)方法,常用于2D游戏。`Rectangle`类定义了矩形的属性,并包含一个`collidesWith`方法,通过比较边界来检测碰撞。若两矩形无重叠部分,四个条件(关于边界相对位置)均需满足。此基础算法适用于简单场景,复杂情况可能需采用更高级的检测技术或物理引擎库。
18 6
|
5天前
|
机器学习/深度学习 监控 算法
基于yolov2深度学习网络的昆虫检测算法matlab仿真,并输出昆虫数量和大小判决
YOLOv2算法应用于昆虫检测,提供实时高效的方法识别和定位图像中的昆虫,提升检测精度。核心是统一检测网络,预测边界框和类别概率。通过预测框尺寸估算昆虫大小,适用于农业监控、生态研究等领域。在matlab2022A上运行,经过关键升级,如采用更优网络结构和损失函数,保证速度与精度。持续优化可增强对不同昆虫的检测能力。![image.png](https://ucc.alicdn.com/pic/developer-ecology/3tnl7rfrqv6tw_e760ff6682a3420cb4e24d1e48b10a2e.png)
|
10天前
|
算法 计算机视觉
图像处理之霍夫变换圆检测算法
图像处理之霍夫变换圆检测算法
10 0
|
10天前
|
算法 计算机视觉
图像处理之角点检测算法(Harris Corner Detection)
图像处理之角点检测算法(Harris Corner Detection)
13 3
|
11天前
|
算法 计算机视觉
图像处理之霍夫变换(直线检测算法)
图像处理之霍夫变换(直线检测算法)
13 0
|
11天前
|
算法 计算机视觉
图像处理之简单脸谱检测算法(Simple Face Detection Algorithm)
图像处理之简单脸谱检测算法(Simple Face Detection Algorithm)
8 0
|
17天前
|
机器学习/深度学习 运维 算法
[ICDE2024]多正常模式感知的频域异常检测算法MACE
阿里云计算平台大数据基础工程技术团队主导,与浙江大学合作的论文《Learning Multi-Pattern Normalities in the Frequency Domain for Efficient Time Series Anomaly Detection》被ICDE2024收录,该论文解决了云服务环境中不同服务存在不同正常模式,而传统神经网络一个训练好的模型只能较好捕捉一种或少数几种正常模式的问题,该论文提出的方法可以使用一个统一模型对不同服务进行检测,就达到比为每一个服务定制一个模型的SOTA方法更好的效果。

热门文章

最新文章