首页 > 技术文章 > 代码运行记录-Homography Propagation and Optimization for Wide-baseline Street Image Interpolation

pdysb 2021-03-01 01:07 原文

运行单应性传播街道图像插帧代码

这段代码是16年的一位大佬的paper上的, github地址,youtube上还有他的demo,现在试一下效果

准备

  1. visual studio
  2. boost windows库,必须于vs版本对应
  3. opencv windows库,必须于vs版本对应
  4. eigen windows库
  5. matlab
  6. 一份slic代码
  7. 一份配准代码,作者给出的链接为 PatchMatch, DAISY Filter Flow, NRDC

本次实验的环境

vs2017 bost1.75(最新) opencv2.4.13 eigen3.3.4

vs配置环境如下,请替换成自己的路径:

  • vc++目录


  • 调试->环境
  • 链接器->输入->附加依赖项

修改代码

分为三部分,HomographyPropagation部分,NRDC部分以及slic部分

HomographyPropagation部分

  1. 修改Warp/triangle.c,替换long类型为__int64, 否则会报内存的错误,参考链接
  2. 修改main.cpp中work_dir_path的路径为自己的路径
  3. 选择nrdc_prepocessing.h的define __BACKWARD 1或者define __FORWARD 1,保留一个,另一个注释
  4. image-20210226115326431启动
  5. 正常输出如下,当第三步选择forward时会在HomographyPropagation-master\data\viewinterp\1产生输出,反之会在2产生输出image-20210226115543869

slic部分

slic.py代码为


import argparse
from skimage import io
import matplotlib.pyplot as plt
from skimage.segmentation import slic
from skimage.util import img_as_float
from skimage.segmentation import mark_boundaries
import numpy as np

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True, help = "Path to the image")
args = vars(ap.parse_args())


image = img_as_float(io.imread(args["image"]))

# for numSegments in (100, 200, 300):
segments = slic(image, n_segments = 500, sigma = 5)
f = open('labels2.txt','w')
l = np.max(segments)
f.writelines('{} {} {} {}\n'.format(segments.shape[1],segments.shape[0],l+1,500))
for a in segments:
    for b in a:
        f.writelines('{}\n'.format(b))
io.imsave('test.jpg', mark_boundaries(image, segments))
    # io.imsave('test.jpg', segments)

装好需要的库,然后python slic.py -i <image_path>运行,很快就能得到结果,可以查看目录下的test.jpg

NRDC部分

下载官方的NRDC代码,matlab的,大致目录如下

image-20210226120512934

打开nrdc_example.m文件,注释12~16行

image-20210226120600720

对应位置加上这部分代码

image-20210226120723944

    fid = fopen('matches.txt','w+');
    for i=1:size(Ref,2)
        for j=1:size(Ref,1)
            fprintf(fid,'%d %d %f %f %d\n',i,j,t(j,i,1)*size(Ref,2),t(j,i,2)*size(Ref,1),t(j,i,1)>0.1);
        end
    end

运行观察结果

image-20210226121002687

运行步骤

  1. slic和NRDC分别生成label.txt和matches.txt,连同两张图片一起复制到 HomographyPropagation-master\data\forward下,或者backward,取决于slic生成的是哪张图片,以及NRDC的Src_path选择的图片,backward的时候两张图片需要互换
  2. 启动HomographyPropagation-master\code下的工程,注意修改好图片路径,在HomographyPropagation-master\data\viewinterp\1或2得到结果
  3. backward,forward都做完后,打开HomographyPropagation-master\code\multibandblending\script_demo.m,运行,在HomographyPropagation-master\data\viewinterp\3观察结果

输出预览

image-20210226122512496

推荐阅读