首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于opencv的数字化super8帧弯曲图像检测与校正

基于opencv的数字化super8帧弯曲图像检测与校正
EN

Stack Overflow用户
提问于 2015-02-27 07:25:41
回答 2查看 539关注 0票数 1

我正在使用光电扫描仪和DIY传输设备来获得旧的Super/Normal 8胶片的高质量扫描。我写了一个自由软件,它使用步进电机在扫描仪窗格上自动传送胶片,并对胶片进行扫描;自由软件存在,可以从胶片中提取帧,并允许从中生成电影。我们建立了一个描述整个过程和软件的wiki

我想要解决的问题是,由于胶片在电影指南中不是100%平放,甚至是跳出来,导致条带的弯曲/扭曲扫描。

以下是弯曲条纹的示例图像:

使用链轮孔或框架边界的几何形状检测弯曲并获得对齐图像的最佳方法是什么?通常,误差在胶片进入/离开胶片导轨的带片的开始/结束处逐渐累积,这可能导致输出胶片中的跳跃。

我更喜欢基于条带的校正,而不是逐帧校正,但我不知道检测是否存在弯曲,然后校正它的最有前途的方法是什么。

你们大师们的任何输入都会很棒!

EN

回答 2

Stack Overflow用户

发布于 2015-02-27 12:08:32

首先要找到图像剪切-这些链轮孔看起来像是非常好的信噪比标记,可以根据需要进行校正。具体地说,它们的侧面与垂直方向的夹角。

也许有更好的东西,但我最近一直在使用轮廓,基本的:

  • Threshold/Canny检测直到它们全部保留下来,然后查找轮廓
  • 使用矩来查找质心(然后您就会知道将胶片上下移动多少)
  • 使用矩或轮廓点本身来(以某种方式)找到切变角-建议使用findContours中的

标签...

也许有一种更好的方法:)至于轻微的曲线-- hrrrm,不知道。

票数 0
EN

Stack Overflow用户

发布于 2020-03-19 20:07:46

这是一个古老的问题,但也许其他人也有类似的问题。正如拉马尔所说,首先要找到框架的轮廓,就像使用OpenCV的findContours()一样。获取希望匹配某些条件的轮廓,例如,质心或多或少位于图像中心且面积最大的轮廓。然后,得到与质心距离最远的四个极点: topleft,topright,bottomleft,bottomright,并使用这些极点应用透视变换:

代码语言:javascript
运行
复制
#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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28754791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档