使用R进行简单的图像/模式识别任务?

时间:2010-06-29 14:19:44

标签: r image-processing plot ocr

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

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

但是,有没有办法自动完成?

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

由于评论中的请求,以下是图像“解决”的示例(即:为其提取数据点位置)

#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))

谢谢,Tal

(p.s:因为我不熟悉这个领域,如果我使用错误的术语或者问一些过于简单或复杂的东西,我很抱歉。这是OMR吗?)

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

尼古拉斯

答案 2 :(得分:2)

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

修改

你可以尝试这个并告诉我它是否在你所寻找的球场吗? 我希望带注释的代码是不言自明的。期待您的回答!

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