V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
imn1
V2EX  ›  问与答

脑子突然石了,一个小逻辑没转过弯来

  •  
  •   imn1 · 2021-07-22 15:55:25 +08:00 · 1204 次点击
    这是一个创建于 1255 天前的主题,其中的信息可能已经有所发展或是发生改变。
    写了两天图片比较程序,都被各种小问题卡住,思绪凌乱

    两幅图 A 和 B,尺寸接近或相等,已知一副是另一幅裁切出来的,就是裁切后放大到跟原图接近,但并不知道是哪一幅

    取其中一副(假设 A ),从中心想周围取约 80%幅面,作为 template,B 的部分与这个 template 匹配成功
    确认 AB 关联(实际上是个从图集中寻找 B 图的过程)

    因为有缩放的原因,template 在匹配过程也有缩放比率,最后匹配成功的比率是 R

    现在根据条件:
    1.R 的大小(<1, =1, >1)
    2.template 来自 A
    能否确认 A,B 中哪幅是裁切后的呢?
    9 条回复    2021-07-22 18:53:06 +08:00
    zxCoder
        1
    zxCoder  
       2021-07-22 15:59:08 +08:00   ❤️ 1
    如果 A 是裁切后放大的,那么取 template 必须缩小才能和 B 匹配,所以 R<1
    如果 B 是裁切后放大的,A 是原图,那么取 template 必须放大才能和 B 匹配,所以 R>1
    mcone
        2
    mcone  
       2021-07-22 16:12:59 +08:00   ❤️ 1
    没看太明白你的描述,既然“匹配成功的比率是”是 R,R 难道不应该永远小于 1 么……

    另外我想确认一下你的匹配算法是怎么写的,按道理有很多 scale invariant 的 feature,两张图先给匹配上,再通过两张图四周的关键点进行配准,虽然笨一些,还是能找到的啊……
    coderluan
        3
    coderluan  
       2021-07-22 16:21:44 +08:00   ❤️ 1
    楼主的解决方案没看明白, 但是需求明白了, 感觉不要这么麻烦吧, 只要取两个图的某些特征值, 最简单的比如颜色范围, 然后对比特征值的范围就行了, 哪个大范围大哪个是原图.
    imn1
        4
    imn1  
    OP
       2021-07-22 16:56:01 +08:00
    @mcone #2
    因为不知道是哪一幅是裁切后的,所以取样时可能可能从原图取样,参看#1,这时 R>1

    @coderluan #3
    一个图集里面可能很多图是相似的,例如连拍,很可能几幅图之间只是轻微变化
    这种非最后成品的图集现在很多的,例如商业硬照,往往连拍几张或者换一点角度再拍,然后从几张里面挑选感觉最好的作为作品
    毕竟现在存储卡都不贵,不像以前那样要省胶卷,摆好了才拍
    例如人脸的表情不同,但姿势一样;例如跑步连拍只是位置不同,跑姿几乎一样

    取某些特征的话,误判率高;另外是效率问题,如果两组图各有 1K 张,特征算法比模板算法慢很多
    我现在遇到最大问题还不是算法选择,而是图片方向问题,在没有 exif 时,还要旋转再比较一次,现在很头痛怎么解决
    coderluan
        5
    coderluan  
       2021-07-22 16:59:54 +08:00   ❤️ 2
    @imn1

    "两幅图 A 和 B,尺寸接近或相等,已知一副是另一幅裁切出来的,就是裁切后放大到跟原图接近,但并不知道是哪一幅"

    "一个图集里面可能很多图是相似的,例如连拍,很可能几幅图之间只是轻微变化
    这种非最后成品的图集现在很多的,例如商业硬照,往往连拍几张或者换一点角度再拍,然后从几张里面挑选感觉最好的作为作品
    毕竟现在存储卡都不贵,不像以前那样要省胶卷,摆好了才拍
    例如人脸的表情不同,但姿势一样;例如跑步连拍只是位置不同,跑姿几乎一样"

    你感觉自己两次说的是一回事吗.......发帖提问怎么还带改需求的.......
    imn1
        6
    imn1  
    OP
       2021-07-22 17:10:08 +08:00
    @coderluan #5
    没有改需求,只是描述了一下“实际上是个从图集中寻找 B 图的过程”这句话
    对应你说的特征提取,难以完成上面的需求(最后一句)

    你可以说说特征方法如何“确认 A,B 中哪幅是裁切后的”,如果可行我一定试一下的,这几天都试了十几种方案了,多试一种长点知识也是收获
    coderluan
        7
    coderluan  
       2021-07-22 17:23:52 +08:00   ❤️ 1
    @imn1 原文不就两张图, 哪来的图集, 我现在基本上不明白你想干什么了, 至于我说的, 假设就 A 和 B, 一个是从另一个裁剪出来的, 可以算直接把颜色转成 HSV 统计范围, 哪个小哪个是裁剪的吧, 或者转成灰度图看直方图曲线, 哪个更平滑哪个是裁剪的, 拿这些做特征, 并不是特征值算法, 怎么都比你那个需要动态调范围的快吧, 毕竟你只要确定哪个是裁剪的, 而不是要确定从什么位置裁剪的啊.
    imn1
        8
    imn1  
    OP
       2021-07-22 17:55:48 +08:00
    @coderluan #7
    好吧,是我说的不够详细,并非只有两张
    流程就是两个图集(各数百上千张),通过特征算法找出相似的各几十张,然后两两模板比较匹配 True/False,False 跳过,True 时同时获得 R,这时我想确定哪张是裁切的,不想交换再计算一次

    就是还是要判断匹配先行,模板能比较准确到唯一一张,虽然会漏判,但 True 的误判很低,所以用了它
    HSV 较早时试过,不能得到唯一(多张图都返回 True ),所以较早放弃了,我再试试提高临界值,毕竟 HSV 速度较快

    BTW,我是想写出通用的程序,并不是单个任务完成这个程序就没用了,手上还有几十万个图集,当然大部分是可以无需计算就简单判断出 False 的,不过就算几十个都无法靠肉眼,所以需要一个以后都可以用的程序
    sadfQED2
        9
    sadfQED2  
       2021-07-22 18:53:06 +08:00 via Android
    你直接放两个 demo 图片出来吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2576 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:33 · PVG 18:33 · LAX 02:33 · JFK 05:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.