- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的问题在这里显示:problem statement。我有一个模板图像,必须在相机图像中检测到。在检测到它之后,我必须使用仿射变换来规范化摄像机图像。我的工作目标是确定十字架。我尝试将SURF功能用于图像标准化步骤,但是模板图像非常规则,不利于SURF匹配。任何想法如何做到这一点?也许某种轮廓匹配?
最佳答案
因此,我对此进行了思考,然后意识到您正在寻找一张WHOLE机票,而不是该机票的子集,并将其转换为规则的矩形。这个问题(至少在理论上来说)并不是那么困难,并且自己编写一些代码来完成它相对微不足道。
到目前为止,最困难的部分将是初始拐角检测。因为您只对整个票证感兴趣,所以票证上的所有内容都没有任何意义。您只对四个角感兴趣。从图片中可以看到,当一张票躺在另一张票的顶部时,拐角并不明显。如果您所有的图片都是一张在非常黑暗的表面上放置的票证,那么这又是微不足道的,但是这样做的目的是编写一个可以处理甚至模棱两可的案件的应用程序。话虽如此,我建议采取以下方法:
1)使用图像滤镜使图像的亮区变亮,使图像的暗区变暗。
我忘了这种滤镜的名字是什么,但基本上,您希望在图像的较暗和较亮区域之间具有更大的对比度。
2)锐化给定亮度以上的所有区域,高斯模糊给定亮度以下的所有区域
特征发现算法通常依靠图像中的“清晰度”来检测拐角和边缘。通过锐化图像的所有较亮区域(考虑您的票证是白色的)并模糊图像的所有较暗区域,您将有更多机会通过算法检测所需的角。
3)使用特征检测来检测四个角
这是事情变得毛茸茸的地方。如果您要拍摄一堆乐透彩票,并且希望能够通过算法找到一张并显示无畸变的彩票,那么您正在谈论的是目前正在研究的尖端 Material 。如果这是您要尝试的操作,那么我建议您阅读一些Yanyan Liu的论文,尤其是基于平移对称的感知分组及其在城市场景中的应用。您很可能必须从机票的预制图片创建模板,然后尝试将该模板的确切功能与相机图像中相同功能的扭曲网格相匹配。一旦匹配度超过百分比阈值,则可以尝试找到它的四个角。如果成功找到它们,则可以继续进行下一步。
另一方面,如果您没有尝试做最前沿的工作,那么您就可以按书上进行一些功能检测。对于拐角检测,我建议使用The Harris&Stephens / Plessey / Shi-Tomasi拐角检测算法。这与Yanxi在她的许多论文中使用的算法相同,并且在角点检测方面做得非常好。我不确定该滤镜是否采用图像的灰度级,或者是否采用当前的色阶,但是如果使用了当前的色阶,则在使用拐角检测算法之前使用Canny边缘检测滤镜将是有利的。一旦(希望)检测到票证的主要角落,您将需要设计某种智能查找算法(基于照片的 Angular 和内容)以“猜测”哪些角落实际上是您关心的四个角落。
还值得注意的是,“均值转换信念传播”可以帮助您确定检测算法之后最重要的功能。基本上,您可以在给定的框内获取多个特征点,取其所有坐标的平均值,然后将框位于结果坐标的中心。如果移动后框中的新点,则再次进行。您将继续执行此操作,直到框中心有单个兴趣点为止。这是对这个想法的简短描述,因此我建议您进一步研究一下,因为我不知道平均的细节。
4)使用双线性插值法确定需要转移到最终图像上的颜色。
重要的是要注意,您不想从失真的图像中获取颜色。在图像上运行所有过滤器和检测算法的目的是找到您感兴趣的特征点。获得这些坐标后,您将返回使用原始图像提取颜色。
如果您要问这个问题,那么我想您知道双线性插值的含义。您可以考虑变形票证的顶部和底部边缘从0(左角)开始,到1(右角)结束。您应该考虑左右边缘从0(上角)开始,到1(下角)结束。您将对输出图像的尺寸应用相同的逻辑。在输出图像中逐像素移动,您将找到检索颜色所需的插值坐标,而使用双线性插值,则可以从输入图像中提取颜色。
就是这样! (大声笑)您要求做的事情涉及很多,我希望您能这样做。据我所知,创建一个在没有用户输入的情况下完美地在所有情况下做到这一点的算法几乎是不可能的。另外,您正在查看乐透彩票的事实也提出了这个项目的道德标准问题。无论如何,希望这足以使您的大脑开始。以下是一些其他链接:
Canny 边缘检测:http://en.wikipedia.org/wiki/Edge_detection
角点检测:http://en.wikipedia.org/wiki/Corner_detection
刘彦喜的论文:http://www.cse.psu.edu/~yanxi/
均值偏移信念传播:在我告诉过您的论文中使用
编辑
级别分离代码
int threshold = 128;
float percentChange = .5;
int oldr, oldg, oldb, newr, newg, newb, grayscale;
//Assuming that pixels is a 1D array of pixel objects that make up the image you're currently working with. Syntax is of Processing.org
for (int i=0; i<pixels.length; i++) {
oldr = red(pixels[i]);
oldg = green(pixels[i]);
oldb = blue(pixels[i]);
grayscale = Math.floor((oldr + oldg + oldb) / 3.0);
if (grayScale >= threshold) { //Brightness is above threshold, therefore increase brightness
newr = oldr + (255-oldr)*percentChange;
newg = oldg + (255-oldg)*percentChange;
newb = oldb + (255-oldb)*percentChange;
} else { //Brightness is below threshold, therefore increase darkness
newr = oldr - oldr*percentChange;
newg = oldg - oldg*percentChange;
newb = oldb - oldb*percentChange;
}
pixels[i] = color(newr,newg,newb);
}
关于image-processing - 图像匹配,仿射扭曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6679507/
以下代码在2端口上监听,当有消息时修改全局dict对象。并且有一个计时器也会修改字典。 d = {} class x(Protocol): def dataReceived(self, dat
Twisted 怎么样?知道函数应该以异步方式执行吗? 异步函数应该返回一个带有call-/errbacks的Deferred(immeadiately),当收到“异步”数据时将被调用。接收到的数据作
我扭曲了服务器。它与插件一起运行。我想根据请求为每个条目编写唯一的前缀。 这意味着当user1发出请求时,它将生成一个唯一的字符串,该字符串将以日志记录为前缀(仅用于此请求)。当user2发出请求时,
我正在使用校准的立体声对进行稀疏重建。这是我一步一步采取的方法: 1- 我使用 MATLAB 中的立体相机校准器应用程序校准了我的立体相机。 2-我拍摄了一对立体图像,并对每个图像进行了不失真处理。
我关注了这个tutorial但我不知道如何从服务器获取响应数据。 class Service(Resource): def render_POST(self, request):
我的网站上有一个页面,它从数据库中获取大量图像并将它们放在一个网格中。 图像的形状和大小各不相同。 我想要做的是显示图像,每个图像都具有相同的宽度和高度,但不会扭曲。 现在我的CSS是 .image{
我正在尝试创建一个简单的代金券程序。 客户端连接到服务器并询问凭证上是否还有时间,如果是,服务器会响应多少时间。 我控制服务器和客户端,客户端也由我编写代码。 现在这就是我的服务器端,客户端是不言自明
假设我通过 TCP 连接快速接收数据。我必须对其进行某种处理。因为我不想阻塞 react 器线程,所以我将处理卸载到后台线程。 数据到达的速度超过了我处理它的速度。如果我将数据放入队列中,队列会无限增
我有一个简单的客户端,它向服务器发送请求并接收响应: from StringIO import StringIO from twisted.internet import reactor fro
我目前正在使用 python/twisted 构建一个 http 服务器。 该服务器必须在另一个 Web 服务器上获取内容,将其存储在本地并将响应发送回客户端。如果遇到 404,它必须尝试提供本地文件
我有一个扭曲的 react 堆监听传入的数据。我有第二个 react 器在特定时间间隔执行 http 请求,将结果发送到第一个 react 器。两者都运行良好。 现在我想把它放在一起在一个 react
我正在尝试使用 ImageMagick 的透视 功能。我看过这些例子,但我无法理解值对应的是什么。我有这段代码: var stream = new MemoryStream(); using (Mag
我有一个应用程序的想法,该应用程序采用每个角落有四个正方形的打印页面,并允许您在至少有两个正方形可见的情况下测量纸上的对象。我希望能够让用户从不太完美的角度拍照,但仍能准确测量物体。 由于我在该领域缺
我试图让用户在文本框中输入文本,并让程序生成所有可能的组合,但最少 3 个字符和最多 6 个字符除外。我不需要像 ' 这样的无用词as'、'a'、'i'、'to' 等弄乱了我的阵列。我还将根据字典检查
给定一个包含 +ve 和 -ve 整数的数组,找出不允许跳过 2 个连续元素的最大总和(即,您必须至少选择其中一个才能向前移动)。 例如:- 10、20、30、-10、-50、40、-50、-1、-3
什么时候应该使用 twisted.python.failure.Failure,什么时候应该使用 twisted.internet.error.ConnectionDone?或者我应该做 twiste
在 Twisted 中有 1 天的经验,我尝试安排消息发送以回复 tcp 客户端: import os, sys, time from twisted.internet import protocol
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
更新:为了便于阅读,这里是如何在 react 器关闭之前添加回调: reactor.addSystemEventTrigger('before', 'shutdown', callable) 原始问题
所以我已经查看了一些涉及使用 python 和 Twisted 框架编写 HTTP 代理的事情。 基本上,就像其他一些问题一样,我希望能够修改将发送回浏览器的数据。也就是说,浏览器请求资源,代理将获取
我是一名优秀的程序员,十分优秀!