标签: pattern-matching

什么是目前被认为是2D点匹配的"最佳"算法?

我有两个包含xy坐标(星星)的列表.我也可能有每颗恒星的亮度(亮度).现在每颗星都有随机的位置抖动,每张图像中可能会有一些额外或缺失的点.我的问题是,"这种数据集的最佳2D点匹配算法是什么?" 我想两者都是简单的线性(平移,旋转,缩放)和非线性(比如坐标中的n次多项式).在点匹配领域的术语中,我正在寻找能够在具有噪声和杂散点的2D点匹配程序之间的枪战中获胜的算法.可能存在不同的"获胜者",这取决于是否使用标签信息(幅度)和/或变换被限制为线性.

我知道有许多类别的2D点匹配算法和每个类中的许多算法(实际上可能总共数百个)但我不知道哪个(如果有的话)被认为是"最好的"或"最标准的"由计算机视觉领域的人.可悲的是,我想读的很多文章都没有在线版本,我只能阅读摘要.在我确定一个特定的算法来实现它之前,很高兴听到一些专家将小麦与谷壳分开.

我有一个使用三角形的工作匹配程序,但它经常失败(约5%的时间),这样解决方案转换有明显的扭曲,但没有明显的原因.这个程序不是我写的,而是来自近20年前写的一篇论文.我想编写一个执行最强大的新实现.我假设(希望)在这个领域取得了一些进展,这使得这看似合理.

algorithm computer-science 2d pattern-matching

9
推荐指数
1
解决办法
3203
查看次数

更好地检查Scala中的匹配

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?如果不是什么时候加入?;)

compiler-construction scala pattern-matching typechecking

9
推荐指数
1
解决办法
1024
查看次数

检查字符串的格式

可以检查字符串是否适合这种格式的最小C##-#####数量是多少(1个数字,破折号再多5个数字).

在我看来,正则表达式可以做到这一点(再次,我希望我知道正则表达式).

所以,这是一个例子:

public bool VerifyBoxNumber (string boxNumber)
{
   // psudo code
   if (boxNumber.FormatMatch("#-#####")
      return true;
   return false;
}
Run Code Online (Sandbox Code Playgroud)

如果您知道将使上述比较有效的真实代码,请添加答案.

c# string pattern-matching

9
推荐指数
3
解决办法
1万
查看次数

PostgreSQL:正则表达式转义函数

为了放弃阅读整个问题,我的基本问题是:
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声明确实需要像更多的东西: …

regex postgresql escaping plpgsql pattern-matching

9
推荐指数
2
解决办法
4853
查看次数

了解列表上的模式匹配

我最近一直在玩提取器,并且想知道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实现.

scala list pattern-matching extractor

9
推荐指数
1
解决办法
3038
查看次数

F#:我如何模式匹配类型值?

我有一个带泛型参数的函数,在其中我需要执行两个函数中的一个,具体取决于参数的类型.

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通知我,通配符的情况永远不会被执行,因为我显然在编译时得到泛型的类型,而不是运行时的实际类型.我该怎么做?

generics f# types pattern-matching

9
推荐指数
1
解决办法
1973
查看次数

从字符串集合中推断模板

我正在索引一组网站,这些网站具有从少量模板生成的大量页面(数千万).我正在寻找一种算法来学习生成页面的模板,并将模板与页面匹配,这样我就只需要为每个被提取的页面存储变量部分和模板参考.

该算法不需要产生尽可能大的压缩,但是当它看到更多页面时它应该会变得更好,并且当面对使用以前看不见的模板生成的页面时它应该优雅地表现.

我非常感谢任何文献或现有图书馆的参考.

我可以在批量页面上运行通用压缩算法.我不想这样做的原因是我感兴趣的数据将在页面的可变部分中,因此模板方法允许我在不解压缩的情况下对其进行检索.我希望能够重新创建整个页面,如果需要,以确保未来的可复制性和防止我的抓取程序中的错误.

string algorithm screen-scraping information-retrieval pattern-matching

9
推荐指数
1
解决办法
638
查看次数

如何在Scala中对嵌套类进行模式匹配?

我已经尝试了下面的代码(相同的方法是在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)

scala pattern-matching

9
推荐指数
1
解决办法
754
查看次数

将曲线图案匹配到图像的边缘

我有一个目标图像,沿着它的边缘搜索曲线和一个包含曲线的模板图像.我需要实现的是在目标图像中找到模板图像中曲线的最佳匹配,并根据得分,找出是否存在匹配.这还包括旋转和调整曲线大小.目标图像可以是Canny Edge探测器的输出,如果这样可以使事情变得更容易.

我正在考虑使用OpenCV(通过使用Python或Processing/Java或者如果那些使用C来限制访问所需的函数)以使事情变得实用和有效,但是无法确定我是否可以使用任何函数(或者他们在OpenCV中的组合,可用于完成这项工作.我一直在阅读OpenCV文档并首先想到Contours可以完成这项工作,但是所有示例都显示了封闭的形状,而不是我的情况,我需要将开放曲线与边缘的一部分相匹配.

那么有没有办法通过使用OpenCV或您建议的任何已知代码或算法来做到这一点?

以下是一些图片来说明问题:

包含要搜索的曲线的模板图像

输入要搜索模板曲线并与其边缘匹配的图像;  这也可以是边缘图像,即Canny Edge检测器的输出,而不是未处理的输入图像

产生的匹配 - 包括旋转和调整大小

algorithm opencv image-processing pattern-matching computer-vision

9
推荐指数
1
解决办法
2853
查看次数

了解Knuth-Morris-Pratt算法

谁可以给我解释一下这个?我一直在阅读它,但仍然很难遵循.

文字:ababdbaababa
模式:ababa

ababa的表是-1 0 0 1 2.

我想我理解表是如何构建的,但是,我不明白一旦发生不匹配,如何转换.好像我们甚至在转移时都不使用桌子?

我们什么时候用这张桌子?

string algorithm pattern-matching

9
推荐指数
3
解决办法
7932
查看次数