我一直在使用优秀的 GPUImage 库,它实现了几个特征检测器:Harris、FAST、ShiTomas、Noble。然而,这些实现都没有帮助特征提取和匹配部分。他们只是输出一组检测到的角点。
我的理解(这是不稳定的)是下一步将检查每个检测到的角点并从中提取特征,这将产生描述符 - 即可以使用的 32 或 64 位数字索引靠近其他类似点的点。
通过阅读 [计算机视觉算法和应用程序,Szeliski] 的第 4.1 章,我了解到使用 BestBin 方法将有助于有效地找到要匹配的相邻特征等。但是,我实际上并不知道如何做到这一点并且我正在寻找一些执行此操作的示例代码。
我发现这个项目 [https://github.com/Moodstocks/sift-gpu-iphone] 声称在 GPU 中实现尽可能多的特征提取。我还看到一些讨论表明它可能会生成错误的描述符。
而且在任何情况下,该代码都不会继续显示提取的特征如何与另一幅图像进行最佳匹配。
我的用例是尝试在图像中查找对象。
有没有人有任何代码可以做到这一点,或者至少有一个很好的实现来显示提取的特征是如何匹配的?我希望不必重写整套算法。
谢谢, 抢。
最佳答案
首先,您需要小心 SIFT 实现,因为 the SIFT algorithm is patented这些专利的所有者需要支付许可费才能使用。因此,我有意避免将该算法用于任何结果。
找到在 GPU 上也能正常工作的良好特征检测和提取方法有点棘手。 GPUImage 中的 Harris、Shi-Tomasi 和 Noble 角点检测器都是相同基本操作的派生物,可能不是识别特征的最快方法。
如您所知,我的 FAST 角落检测器尚未运行。那里的想法是使用基于局部二进制模式的查找纹理(为什么我首先构建那个过滤器来测试这个概念),并让它返回它是否是一个角点。这应该比 Harris 等角落检测器快得多。我还需要完成我的直方图金字塔点提取器,这样特征提取就不会在 GPU 上以极其缓慢的循环完成。
对 FAST 角检测器使用查找纹理的灵感来自 this paper Jaco Cronje 的一项技术,他们称之为 BFROST。除了使用基于纹理的快速查找进行特征检测外,该论文还建议使用二进制模式作为特征的快速描述符。比这要多一点,但总的来说,这就是他们的建议。
特征匹配是通过汉明距离完成的,但是虽然有快速的 CPU 端和 CUDA 指令来计算它,但 OpenGL ES 没有。那里可能需要一种不同的方法。同样,我没有一个好的解决方案来找到 CPU 端功能之外的功能组之间的最佳匹配,但我还没有想那么远。
我的主要目标是将其纳入框架(这是我构建它的原因之一),但最近我没有时间处理此问题。以上至少是我对如何处理这个问题的想法,但我警告你,这并不容易实现。
关于ios - 适用于 iOS 的基于 GPU 的 SIFT 特征提取器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133031/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
当我使用has_one时,它工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc