【问题标题】:Using R for simple image/pattern-recognition task?使用 R 进行简单的图像/模式识别任务?
【发布时间】:2010-06-29 14:19:43
【问题描述】:

我有一张包含很多点的图像,我想从中提取每个点的 x-y 位置。

我已经知道如何手动执行此操作(有一个包可以执行此操作)。

但是,有什么方法可以自动完成吗?

(我的下一个问题是 - 有没有一种方法,当有许多线条的图像时,检测线条相交/“相互接触”的位置)

由于 cmets 中的请求,这里是一个图像“求解”的示例(即:为其提取数据点位置)

#riddle 1 (find dots):
plot(cars, pch = 19)
#riddle 2 (find empty center circles):
plot(cars, pch = 1)
#riddle 2 (fine intersection points):
plot(cars, pch = 3)
#riddle 3 (find intersections between lines):
plot(cars, pch = 1, col = "white")
lines(stats::lowess(cars))
abline(v = c(5,10,15,20,25))

谢谢,塔尔

(ps:由于我不熟悉这个领域,如果我使用了错误的术语或问的东西太简单或太复杂,我很抱歉。这是OMR吗?)

【问题讨论】:

  • 你为什么对这张照片这么保密?你能创造出公平的复制品,这样我们就可以动手了吗? =) 否则,我能做的(而且我不能做太多,因为 Dirk 已经说过)就是将您指向特定的包。您仍然倾向于将 R 用作“通用”编程语言。我认为 C 更适合此类问题...
  • 等一下...您想从“纸笔”问卷中导入数据吗? O_o 线的交点是指 X 标记?
  • 你好aL3xa,我提出的问题已经在各个地方出现过。每次我“手动”解决它时,我都想看看是否可以找到更通用的解决方案(使用 R)。顺便说一句,有趣的是你在取笑我关于“R是一种通用语言”,当前一段时间我明确询问是否是这种情况时——这里的人把我的问题投给了-5:D跨度>
  • 哎哟!好的,我不会再这样做了! =) 但另一方面,我强烈推荐 C,因为它具有强大的图形功能。我看到你发布了一个例子......我会看看我能做什么,在那之前,我想你只剩下identify...... =(
  • 感谢 Al3xa :) 。关于识别 - 看看“图书馆(数字化)”干杯,Tal

标签: r image-processing plot ocr


【解决方案1】:

Medical Imaging 任务视图涵盖一般图像验证,这可能是一个开始。

【讨论】:

    【解决方案2】:

    在 Dirk 之后跟进,是的,检查医学成像任务视图。也看看Rforge, Romain Francois 有一个 RJImage 包,最近注册了另一个图像处理包。您正在寻找的是分割算法。你的点问题比线问题容易得多。第一个可以使用 RGB 或灰度过滤器完成,只需进行某种半径搜索。检测线性特征更难。提取特征后,您可以使用扫描线算法来检测交叉点。 EBIimage 可能有一个用于检测小插图中的细胞的示例。

    尼古拉斯

    【讨论】:

    • 您好 Nicholas,非常感谢您的详细回复!由于问题的cmets,我添加了一个示例图像来尝试“解决”。如果您甚至可以解决第一个示例 - 这将是最有用的。再次感谢,塔尔
    【解决方案3】:

    我认为您可以使用包 raster 从具有特定值的图像中提取 xy 坐标。看看包小插曲。

    编辑

    你能试试这个并告诉我它是否在你正在寻找的球场中吗? 我希望带有 cmets 的代码是不言自明的。期待您的回答!

    library(raster)
    rst <- raster(nrows = 100, ncols = 100) #create a 100x100 raster
    rst[] <- round(runif(ncell(rst))) #populate raster with values, for simplicity we round them to 0 and 1
    par(mfrow=c(1,2))
    plot(rst) #see what you've got so far
    rst.vals <- getValues(rst) #extract values from rst object
    rst.cell.vals <- which(rst.vals == 1) #see which cells are 1
    coords <- xyFromCell(rst, rst.cell.vals) #get coordinates of ones
    rst[rst.cell.vals] <- NA #set those raster cells that are 1 to NA (you can play with rst[!rst.cell.vals] <- NA to exclude all others)
    plot(rst) #a diag plot, should have only one color
    

    【讨论】:

    • 您好 Romunov,感谢您提供的链接。我浏览了这些小插曲,找不到你在说什么。你指的是哪一页? cran.at.r-project.org/web/packages/raster/vignettes/Raster.pdf
    • 您基本上可以操纵您的栅格将所有不需要的值设置为 NA 并为栅格上的剩余值提取 xy。这就是我为我的项目做的方式,但可能有一种我还不熟悉的更优雅的方式。我承认,光栅包需要一些时间才能习惯它并感受到它的全部功能。
    • @RomanLuštrik 我正在努力解决stats.stackexchange.com/questions/134097/image-classification-r/… 的问题。是否可以提供任何输入?到目前为止,我正在使用 R raster 包来获取图像,然后使用 getValues 函数。我需要有关如何检测图像中的线条的指南……您似乎对光栅包有很好的处理,希望您提供反馈。
    • @user2543622 检测光栅图像中的线条可不是件小事。我在考虑计算机视觉 - 用足够多的图像训练程序并使用其中一个库(或 Python,在这方面已经很好地涵盖)来推断给定的时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2016-08-10
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多