我有两个包含xy坐标(星星)的列表.我也可能有每颗恒星的亮度(亮度).现在每颗星都有随机的位置抖动,每张图像中可能会有一些额外或缺失的点.我的问题是,"这种数据集的最佳2D点匹配算法是什么?" 我想两者都是简单的线性(平移,旋转,缩放)和非线性(比如坐标中的n次多项式).在点匹配领域的术语中,我正在寻找能够在具有噪声和杂散点的2D点匹配程序之间的枪战中获胜的算法.可能存在不同的"获胜者",这取决于是否使用标签信息(幅度)和/或变换被限制为线性.
我知道有许多类别的2D点匹配算法和每个类中的许多算法(实际上可能总共数百个)但我不知道哪个(如果有的话)被认为是"最好的"或"最标准的"由计算机视觉领域的人.可悲的是,我想读的很多文章都没有在线版本,我只能阅读摘要.在我确定一个特定的算法来实现它之前,很高兴听到一些专家将小麦与谷壳分开.
我有一个使用三角形的工作匹配程序,但它经常失败(约5%的时间),这样解决方案转换有明显的扭曲,但没有明显的原因.这个程序不是我写的,而是来自近20年前写的一篇论文.我想编写一个执行最强大的新实现.我假设(希望)在这个领域取得了一些进展,这使得这看似合理.
scala> class A
defined class A
scala> class B
defined class B
scala> val a: A = new A
a: A = A@551510e8
scala> a match {
| case _: B => println("unlikely")
| case _ => println("no match")
| }
no match
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,编译器不应该告诉我其中一个案例永远不能匹配吗?一个稍微复杂的例子最近引起了我的注意,导致了一个应该被编译器捕获的不必要的bug.
编辑:
只是为了更清楚这个问题.由于某种原因,我无法看到Scala中这是不可能的吗?(我可以理解这些类型是否使用泛型和类型擦除导致问题,但这看起来非常直接.)如果这不是不可能的,是否有正当理由这不是Scala?如果不是什么时候加入?;)
可以检查字符串是否适合这种格式的最小C##-#####
数量是多少(1个数字,破折号再多5个数字).
在我看来,正则表达式可以做到这一点(再次,我希望我知道正则表达式).
所以,这是一个例子:
public bool VerifyBoxNumber (string boxNumber)
{
// psudo code
if (boxNumber.FormatMatch("#-#####")
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果您知道将使上述比较有效的真实代码,请添加答案.
为了放弃阅读整个问题,我的基本问题是:
PostgreSQL中是否有一个函数来转义字符串中的正则表达式字符?
我已经探测过文档,但无法找到这样的功能.
这是完整的问题:
在PostgreSQL数据库中,我有一个包含唯一名称的列.我还有一个定期在此字段中插入名称的进程,并且为了防止重复,如果需要输入已存在的名称,它会在末尾附加一个空格和括号.
即姓名,姓名(1),姓名(2),姓名(3)等
就目前而言,我使用以下代码来查找要在系列中添加的下一个数字(用plpgsql编写):
var_name_id := 1;
SELECT CAST(substring(a.name from E'\\((\\d+)\\)$') AS int)
INTO var_last_name_id
FROM my_table.names a
WHERE a.name LIKE var_name || ' (%)'
ORDER BY CAST(substring(a.name from E'\\((\\d+)\\)$') AS int) DESC
LIMIT 1;
IF var_last_name_id IS NOT NULL THEN
var_name_id = var_last_name_id + 1;
END IF;
var_new_name := var_name || ' (' || var_name_id || ')';
Run Code Online (Sandbox Code Playgroud)
(var_name
包含我试图插入的名称.)
这暂时有效,但问题出在WHERE
声明中:
WHERE a.name LIKE var_name || ' (%)'
Run Code Online (Sandbox Code Playgroud)
此检查不会验证有%
问题的数字,并且它不会考虑多个括号,如"Name((1))",如果存在任何一种情况,则会抛出强制转换异常.
该WHERE
声明确实需要像更多的东西: …
我最近一直在玩提取器,并且想知道List提取器如何工作尤其如此:
List(1, 2, 3) match {
case x :: y :: z :: Nil => x + y + z // case ::(x, ::(y, ::(z , Nil)))
}
Run Code Online (Sandbox Code Playgroud)
Ok ::用在模式中,所以我猜编译器现在在:: - Object中查找unapply方法.试过这个:
scala> (::).unapply(::(1, ::(2, Nil)))
res3: Option[(Int, List[Int])] = Some((1,List(2)))
Run Code Online (Sandbox Code Playgroud)
很好,有效.但是,这不是:
scala> (::).unapply(List(1,2,3))
<console>:6: error: type mismatch;
found : List[Int]
required: scala.collection.immutable.::[?]
(::).unapply(List(1,2,3))
Run Code Online (Sandbox Code Playgroud)
这样做:
scala> List.unapplySeq(List(1,2,3))
res5: Some[List[Int]] = Some(List(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
其实我此刻有点困惑.编译器如何在此处选择正确的unapply实现.
我有一个带泛型参数的函数,在其中我需要执行两个函数中的一个,具体取决于参数的类型.
member this.Load<'T> _path =
let hhType = typeof<HooHah>
match typeof<'T> with
| hhType -> this.LoadLikeCrazy<'T> _path
| _ -> this.LoadWithPizzaz<'T> _path
Run Code Online (Sandbox Code Playgroud)
....其中LoadLikeCrazy和LoadWithPizzaz都返回'T.
VS通知我,通配符的情况永远不会被执行,因为我显然在编译时得到泛型的类型,而不是运行时的实际类型.我该怎么做?
我正在索引一组网站,这些网站具有从少量模板生成的大量页面(数千万).我正在寻找一种算法来学习生成页面的模板,并将模板与页面匹配,这样我就只需要为每个被提取的页面存储变量部分和模板参考.
该算法不需要产生尽可能大的压缩,但是当它看到更多页面时它应该会变得更好,并且当面对使用以前看不见的模板生成的页面时它应该优雅地表现.
我非常感谢任何文献或现有图书馆的参考.
我可以在批量页面上运行通用压缩算法.我不想这样做的原因是我感兴趣的数据将在页面的可变部分中,因此模板方法允许我在不解压缩的情况下对其进行检索.我希望能够重新创建整个页面,如果需要,以确保未来的可复制性和防止我的抓取程序中的错误.
string algorithm screen-scraping information-retrieval pattern-matching
我已经尝试了下面的代码(相同的方法是在Scala编程之后编写的)
class Person() {
class Room(r: Int, c: Int) {
val row = r
val col = c
override def hashCode: Int =
41 * (
41 + row.hashCode
) + col.hashCode
override def equals(other: Any) =
other match {
case that: Room =>
(that canEqual this) &&
this.row == that.row &&
this.col == that.col
case _ => false
}
def canEqual(other: Any) =
other.isInstanceOf[Room]
}
val room = new Room(2,1)
}
val p1 = new …
Run Code Online (Sandbox Code Playgroud) 我有一个目标图像,沿着它的边缘搜索曲线和一个包含曲线的模板图像.我需要实现的是在目标图像中找到模板图像中曲线的最佳匹配,并根据得分,找出是否存在匹配.这还包括旋转和调整曲线大小.目标图像可以是Canny Edge探测器的输出,如果这样可以使事情变得更容易.
我正在考虑使用OpenCV(通过使用Python或Processing/Java或者如果那些使用C来限制访问所需的函数)以使事情变得实用和有效,但是无法确定我是否可以使用任何函数(或者他们在OpenCV中的组合,可用于完成这项工作.我一直在阅读OpenCV文档并首先想到Contours可以完成这项工作,但是所有示例都显示了封闭的形状,而不是我的情况,我需要将开放曲线与边缘的一部分相匹配.
那么有没有办法通过使用OpenCV或您建议的任何已知代码或算法来做到这一点?
以下是一些图片来说明问题:
algorithm opencv image-processing pattern-matching computer-vision
谁可以给我解释一下这个?我一直在阅读它,但仍然很难遵循.
文字:ababdbaababa
模式:ababa
ababa的表是-1 0 0 1 2.
我想我理解表是如何构建的,但是,我不明白一旦发生不匹配,如何转换.好像我们甚至在转移时都不使用桌子?
我们什么时候用这张桌子?