

























IFSolverR 是 IFSolver 系列的改进,旨在有效应对官方的加扰手段,并增加可视化修正和鲁棒性。同时对老旧的代码结构进行调整。
一些 Agent 嘤该很熟悉,在 2020 年创建的 IFSolver 为不少地区的 IFS 图片解码提供了帮助。然而好景不长,在 2021 年,IFS-UN 似乎注意到了这一点,为了提升活动难度,避免摸鱼,从某个月份开始,IFS 解密图便加入了旋转、缩放、平移等一系列操作。而这导致了先前基于图片分割再匹配的 IFSolver 完全失效。同时又嘤为选取 Portal 地点不合适等原因,曾经出现过地区 POC 躺平,宣布放弃举办 IFS 的情况。

为此,一种新的 IFSolver 需要被开发出来。我将其称为 IFSolverR(虽然依然沿用前者的仓库和名字)。
先前的思路一直维持在,将图片分割后再进行匹配的思路。而这样的思路是需要建立在两个前提下的:
在先前版本的 IFSolver 中,有若干 threshold 需要针对不同的图片进行调整,并没有一个相对稳定的值。同时对原图像的加扰宣布了这一方法的死亡。
因此,问题出在,如何在一个大图像中,从数千张图像的库里匹配出经过缩放、平移、旋转后的图像?
回忆起先前的内容,易想到还有一种尚未使用的解决方案:
SIFT (尺度不变性特征变换) 是利用 DoG 金字塔检测极值点并提取特征 descriptor 的方法,对旋转、尺度缩放、亮度变化也具有不变性。
SIFT 算法比较准确,甚至可以考虑在原图上不做分割,直接与数千张图片进行识别。但不巧的是,这是一个具有专利的算法 (今年 3 月到期啦!),在 OpenCV 上还暂未从 Non-free 挪出来 (Soon™)。
显然在 1202 年,OpenCV 的新版本已经包含了此算法,它的各类不变性特点看上去非常适合 IFSolver,唯一的缺点就是计算复杂度上比 ORB 高了不少。不过考虑到既然已经做了人工加扰,适当提升算力是必要的。
以上就是 IFSolverR 的基本架构。
项目中 Extractor 和 Matcher 分别对应特征的提取和识别,目前只有 SIFTExtractor 和 BFMatcher,代表使用 SIFT 进行特征提取,使用 BruteForce 进行暴力匹配。这可以为将来改良或换用更高效的算法提供便利。
其余的辅助类模块均位于 Utils 中,包含了一系列与特征识别匹配算法无关的操作。
使用 2021.7 的成都 IFS 谜题照片,和相应范围内近 3000 个 Portal 的 csv 列表,能够在 2 处手动纠正的情况下,对全部待匹配图片得到 100% 的准确率。

ZNV31CHAOS648MH
测试使用了 5800x + 默认未安装 CUDA 加速的 OpenCV。匹配过程使用并占满了全部的核心,总计运行时间在 10 分钟内。
在后续的文章中,将着重介绍 IFSolverR 改进的部分,以及它们每一步对原谜题图像处理的效果。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。