我正在使用光电扫描仪和DIY传输设备来获得旧的Super/Normal 8胶片的高质量扫描。我写了一个自由软件,它使用步进电机在扫描仪窗格上自动传送胶片,并对胶片进行扫描;自由软件存在,可以从胶片中提取帧,并允许从中生成电影。我们建立了一个描述整个过程和软件的wiki。
我想要解决的问题是,由于胶片在电影指南中不是100%平放,甚至是跳出来,导致条带的弯曲/扭曲扫描。
以下是弯曲条纹的示例图像:

使用链轮孔或框架边界的几何形状检测弯曲并获得对齐图像的最佳方法是什么?通常,误差在胶片进入/离开胶片导轨的带片的开始/结束处逐渐累积,这可能导致输出胶片中的跳跃。
我更喜欢基于条带的校正,而不是逐帧校正,但我不知道检测是否存在弯曲,然后校正它的最有前途的方法是什么。
你们大师们的任何输入都会很棒!
发布于 2015-02-27 12:08:32
首先要找到图像剪切-这些链轮孔看起来像是非常好的信噪比标记,可以根据需要进行校正。具体地说,它们的侧面与垂直方向的夹角。
也许有更好的东西,但我最近一直在使用轮廓,基本的:
标签...
也许有一种更好的方法:)至于轻微的曲线-- hrrrm,不知道。
发布于 2020-03-19 20:07:46
这是一个古老的问题,但也许其他人也有类似的问题。正如拉马尔所说,首先要找到框架的轮廓,就像使用OpenCV的findContours()一样。获取希望匹配某些条件的轮廓,例如,质心或多或少位于图像中心且面积最大的轮廓。然后,得到与质心距离最远的四个极点: topleft,topright,bottomleft,bottomright,并使用这些极点应用透视变换:
#get max distances between points. Coordinates in [x,y]
height_dst = max((bottomleft[1]-topleft[1]), (bottomright[1]-topright[1]))
width_dst = max((topright[0]-topleft[0]), (bottomleft[0]-bottomleft[0]))
#destination points
#(topleft,topright,bottomleft,bottomright) x (x,y)
dst_pts = [[0,0], [width_dst,0], [0,height_dst], [width_dst,height_dst]]
#transformation matrix
or_pts = [topleft,topright,bottomleft,bottomright]
transM = cv2.getPerspectiveTransform(np.float32(or_pts), np.float32(dst_pts))
#transform image
img = cv2.warpPerspective(img,transM,(width_dst,height_dst))https://stackoverflow.com/questions/28754791
复制相似问题