3、自动驾驶学习笔记——目标检测算法概述

一、目标检测的几个分类

  • 无人驾驶中的检测
    图片/点云 ——>2D/3D
    bounding box
  • 基于图片的检测算法
    general idea
    two-step:RCNN SPPnet Fast-RCNN Faster-RCNN
    one-step:YOLO SSD YOLO-v2 YOLO-v3
    Tensorflow实战Faster-RCNN
  • 基于激光雷达点云的检测算法
    激光雷达点云简介
    Pixel-Based Voxel-Based Tree-Based Point-Based
    实战基于点云的目标检测

在这里插入图片描述

二、基于图片的检测算法

图片检测即 detection既包含目标物体的类别,又包括目标物体的位置,因此主题思路就是先找到图像的ROI区域,然后进行类别区分,最后确定目标位置

在这里插入图片描述
=============== =思路= ================

在这里插入图片描述

2.1 生成ROI区域以及分类

1、生成ROI

在这里插入图片描述

2、ROI分类

在这里插入图片描述

3、小结

在这里插入图片描述

4、几个算法模型小结

1、RCNN

  • 位置:Selective Search提取候选框
  • 类别:CNN提取特征+SVM分类
  • 位置修正:LR

2、SPPnet:
在这里插入图片描述
3、Fast-CNN
在这里插入图片描述
4、Faster-CNN
在这里插入图片描述
5、YOLO
在这里插入图片描述
6、SSD
在这里插入图片描述
7、YOLO-v2
在这里插入图片描述
8、YOLO-v3
在这里插入图片描述

5、简单代码实现

1)基础opencv-python库使用——手动图像提取

--------------------python代码实现-------------------------

import cv2
import matplotlib.pyplot as plt
# 展示图像,封装成函数
def cv_show_image(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)  # 等待时间,单位是毫秒,0代表任意键终止
    cv2.destroyAllWindows()
# 读取彩色图像
img = cv2.imread('11.png')
part = img[0:300, 80:300]
a1=cv_show_image('naruto', part)
part = img[200:500, 280:500]
a2=cv_show_image('naruto', part)

# # 分割图像的三个通道
b, g, r = cv2.split(img)

a3=cv_show_image('gray image, only show B Channel', b)  # 单一通道,就是灰色展示出来了
a4=cv_show_image('gray image, only show G Channel', g)  # 单一通道,就是灰色展示出来了
a5=cv_show_image('gray image, only show R Channel', r)  # 单一通道,就是灰色展示出来了

# 仅仅保留R通道
curr_img = img.copy()
curr_img[:, :, 0] = 0  # 擦掉B通道
curr_img[:, :, 1] = 0  # 擦掉G通道
a6=cv_show_image('colorful image, only keep R Channel data', curr_img)  # 三个通道,显示彩色图像

# 仅仅保留G通道
curr_img = img.copy()
curr_img[:, :, 0] = 0  # 擦掉B通道
curr_img[:, :, 2] = 0  # 擦掉R通道
a7=cv_show_image('colorful image, only keep G Channel data', curr_img)  # 三个通道,显示彩色图像

# 仅仅保留R通道
curr_img = img.copy()
curr_img[:, :, 1] = 0  # 擦掉G通道
curr_img[:, :, 2] = 0  # 擦掉R通道
a8=cv_show_image('colorful image, only keep B Channel data', curr_img)  # 三个通道,显示彩色图像
img = cv2.imread('11.png')
cv2.imshow('img', img)
cv2.waitKey(0)

# 定义填充的四周的宽度
top_size, bottom_size, left_sze, right_size = (50, 50, 50, 50)

# 进行不同的边界填充
# 边界的像素值,重复填充
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_sze, right_size, borderType=cv2.BORDER_REPLICATE)
# 映射镜像,比如是 dcba|abcd|dcba
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_sze, right_size, borderType=cv2.BORDER_REFLECT)
# 映射镜像,比如是 dcb|abcd|cba
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_sze, right_size, borderType=cv2.BORDER_REFLECT101)
# 外包装法
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_sze, right_size, borderType=cv2.BORDER_WRAP)
# 常数来填充
content = cv2.copyMakeBorder(img, top_size, bottom_size, left_sze, right_size, borderType=cv2.BORDER_CONSTANT, value=0)

plt.subplot(231), plt.imshow(img, 'gray'), plt.title('original image')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('replicate padding image')
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('reflect padding image')
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('reflect101 padding image')
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('wrap padding image')
plt.subplot(236), plt.imshow(content, 'gray'), plt.title('content padding image')
plt.show()

代码二结果图:
在这里插入图片描述
--------------------------- C++ -------------------------------
来源

//************头文件包含*************
#include "stdafx.h"
#include<iostream>
#include<opencv.hpp>//包含opencv的头文件
//***********************************


//************命名空间***************
using namespace cv;//使用opencv命名空间
using namespace std;
//***********************************


//************主函数*****************
int main()
{ 
	int c;
	Mat img1 = imread("1.jpg");
	Mat img2,img3,img4,img5;

	img4 = img1.clone();//将img1图像复制到img4中,此复制连同数据区域一起复制

	namedWindow("原图");//创建窗口
	namedWindow("ROI区域图");//创建窗口
	namedWindow("复制图");//创建窗口

	while (1)
	{
		img2 = img1(Rect(200,200,100,100));//选取img1中从(200,200)到(300,300)的ROI区域
		img5 = img1(Range(100,100+img2.rows),Range(100,100+img2.cols));//选取img1中从(100,100)开始与img2同样大小的ROI区域
		img3 = img2.clone();//将img2图像复制到img3中,此复制连同数据区域一起复制
		img3.copyTo(img5);//将img3图像复制到img5中,此时img1中相应的ROI区域数据也一起发生了变化

		imshow("原图", img4);//显示图像
		imshow("ROI区域图", img2);//ROI区域图像
		imshow("复制图", img1);//显示合并后的图像

		c = waitKey(0);//等待按键按下
		if (c == 27||char(c) == 'q'|| char(c) == 'Q')//按下Q键或者ESC键退出程序
			break;
	}
	
	return 0;
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值