HPEC月例会_2018年_1月


图像拼接

维护标签图和原始图,不断增加贴图扩大语义地图 图像拼接算法简述如下:

  • 提取特征点并计算描述子,如SIFT、SURF、ORB等
  • 匹配特征点,计算H矩阵,两幅图像的变换矩阵
  • 使用H矩阵将新图warp到一个柱面上,和旧图进行拼接
  • 拼接后的图片作为旧图,新图循环上述操作形成大图

语义地图拼接算法简述如下:

  • 提取特征点并计算描述子,如SIFT、SURF、ORB等
  • 匹配特征点,计算H矩阵,两幅图像的变换矩阵
  • 输入语义网络中计算每一时刻当前的语义标签
  • 使用H矩阵将新图warp到一个柱面上,和旧图进行拼接使用H矩阵将新语义标签图warp到一个柱面上,和旧语义标签图进行拼接
  • 拼接后的图片作为旧图,新图循环上述操作形成大图

测试图像gif

最后拼接的大图

工大无人机视频语义图拼接原图

工大无人机视频语义图拼接结果

具体代码仓库和结构如下:

def main():

    # Get input set of images
    img1 = cv2.imread(sys.argv[1])
    img2 = cv2.imread(sys.argv[2])

    img1_label = None
    img2_label = None
    if len(sys.argv) == 5:
        img1_label = cv2.imread(sys.argv[3])
        img2_label = cv2.imread(sys.argv[4])
    # print('img1_label:', img1_label)
    # print('img2_label:', img2_label)

    # Equalize histogram
    img1 = equalize_histogram_color(img1)
    img2 = equalize_histogram_color(img2)

    # Show input images
    #input_images = np.hstack( (img1, img2) )
    #cv2.imshow ('Input Images', input_images)

    # Use SIFT to find keypoints and return homography matrix
    M =  get_sift_homography(img1, img2)

    # Stitch the images together using homography matrix

    result_image = get_stitched_image(img2, img1, M)
    result_image_label = None
    if img1_label is not None and img2_label is not None:
        print("result_image_label")
        result_image_label = get_stitched_image(img2_label, img1_label, M)

    # Write the result to the same directory
    # result_image_name = 'results/result_'+sys.argv[1]
    # cv2.imwrite(result_image_name, result_image)

    # Show the resulting image
    cv2.imshow ('Result', result_image)
    if result_image_label is not None:
        cv2.imshow ('Result_Label', result_image_label)
    cv2.waitKey()

进一步工作

尝试算法实现仅仅比较前后两帧图像的基础上对图像拼接,而不是逐渐扩大结果图进行拼接。


语义分割


网络实现

将主流论文中的语义分割算法参考开源代码,使用pytorch统一实现,封装为自己的语义分割库,方便修改以及后期的实验比较。主要按照模型加载、数据集加载、训练、测试、校准、可视化等方面集成,并且对每一个网络在CamVid数据集上进行了训练并显示评估指标,同时对于速度实时性这个方面尤其测试,方便后期改进自己的模型实现实时语义分割。


数据集实现


训练过程可视化界面

显示正确的语义图和预测的语义图,同时将每一个epoch中的loss以及一次epoch里面的loss显示绘图出来。

具体代码仓库和结构如下:


进一步工作

  • 由于部分网络结构代码未公开,仍旧在阅读论文重现论文结果;
  • 在CamVid数据集上的测试结果精度依然较低,mIOU为60%左右,思考是训练周期不够长的问题,还是其他问题等等(以上网络均进行训练过,ps使用同学的CPU服务器。。。。比较耗时因此在一定epoch时终止训练);
  • 对原始工大无人机数据进行标记,同时在调试好无人机整体数据采集后在工大记录有用数据拍摄图像,以求更好进行图像拼接以及分割;

视频预测

  • 继续先前的工作,将Moving MNIST数据集更换为真实场景的Kitti数据集,并进行预测;
  • 在视频采集前期,将大疆的图像记录到本地,通过ROS实现大疆图像在同一局域网下的存储显示,并参考ROS android demo同样使用ROS接口显示大疆相应数据以及操控大疆运动;

具体代码仓库和结构如下:


进一步工作

  • 实现prednet网络并在Kitti数据集上训练预测;