在图像中检测颜色

3
我希望R能够在图像的某个部分检测出给定的颜色。我已经阅读了RGB方案,但我想知道是否有一个软件包或一种方法,可以让R检测出像黄色这样的一组像素。是否有解决方案,还是我只能使用RGB?谢谢。

你的图像是如何存储的?它可能是一个二进制文件,或者是一个包含RGB值的CSV文件吗? - cptwonton
你永远不会被困在 RGB 中。在这里询问包或库被视为离题。我建议你在网上搜索“R 中的颜色分割”。 - Piglet
@cptwonton,我不知道。有什么方法可以检查吗?对我的无知请见谅。 - Miguel
所以,对于@ cptwonton的跟进,您所说的颜色是什么意思?在RGB颜色空间中,如果您正在处理8位3波段光栅图像,其中每个波段的值可以占用0-255的范围。这里的“黄色”是您定义的,但将由大约(255,255,0)的某些内容来描述。您是否有兴趣捕获一系列像素或特定像素值? - SeldomSeenSlim
@MigueldeDeus,请查看此链接http://ciphervision.com/Color-based-object-detection - flamelite
1个回答

5

Here you go:

install.packages('raster')
library(raster)
#Get some data
duck.jpg<-tempfile()
download.file('http://www.pilgrimshospices.org/wp-content/uploads/Pilgrims-Hospice-Duck.jpg',duck.jpg,mode="wb")

#Plug it into a stack object
duck.raster<-stack(duck.jpg)
names(duck.raster)<-c('r','g','b')
#Look at it
plotRGB(duck.raster)

duck.yellow<-duck.raster

duck.yellow$Yellow_spots<-0
duck.yellow$Yellow_spots[duck.yellow$r<250&duck.yellow$g<250&duck.yellow$b>5]<-1
plot(duck.yellow$Yellow_spots)

所以,这里有几个可教的要点。数字图像基本上是一个容纳像素值的桶。因此,要对栅格图像(即数字图像)进行子集划分,只需使用某些工具将其读入R中;决定如何对其进行子集划分;并按照在R中对任何其他数据进行子集划分的方式进行子集划分。 在R中,另一种思考栅格的方式是将其视为大小相同的矩阵堆栈,其中堆栈中的矩阵数量等于图像中的波段数。通过这种方式,您可以像操作R中的任何其他矩阵一样操作数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接