Image processing 如何区分照片和图片?
我有以下问题: 我得到一组图像,我需要使用OpenCV库将它们划分为照片和图片(图形) 我已经试过了Image processing 如何区分照片和图片?,image-processing,opencv,computer-vision,Image Processing,Opencv,Computer Vision,我有以下问题: 我得到一组图像,我需要使用OpenCV库将它们划分为照片和图片(图形) 我已经试过了 要分析RGB直方图(在平均图片中,直方图中有空的箱子) 分析HSV直方图(一般图片颜色不多) 搜索轮廓(平均而言,图片上的轮廓数少于照片上的轮廓数) 所以我有7%的错误(在2000张图片上测试)。我有点困惑,因为我在众多的计算机视觉手段方面没有太多的经验 例如,下面这张照片。它的直方图(RGB和HSV)非常差,轮廓的数量非常少。另外还有很多背景色,所以我需要找到一个对象,只计算它的直方图(我使用
你能告诉我我还能尝试什么方法吗 一般建议是增加特征数量(或获得更好的特征),并使用这些特征构建分类器,并使用适当的机器学习算法进行训练。OpenCV已经有了一些好的算法,您可以利用它们
我从来没有研究过这个问题,但通过快速的谷歌搜索,我找到了Cutzu等人的这篇论文。一个应该有用的功能是梯度直方图。自然图像具有特定的梯度强度分布。我使用您的数据集创建了非常简单的模型。为了做到这一点,我使用了R 输入数据
rgbh1 - number of bins in RGB histogram, which value > @param@, in my case @param@ = 30 (340 is maximum value)
rgbh2 - number of bins in RGB histogram, which value > 0 (not empty)
hsvh1 - number of bins in HSV histogram, which value > @param@, in my case @param@ = 30 (340 is maximum value)
hsvh2 - number of bins in HSV histogram, which value > 0 (not empty)
countours - number of contours on image
PicFlag - flag indicating picture/photo (picture = 1, photo = 0)
数据探索
为了更好地理解您的数据,这里是一个按图片/照片组绘制的单个变量分布图(y轴上有百分比):
这清楚地表明,存在具有预测能力的变量。它们中的大多数可以在我们的模型中使用。接下来,我创建了一个简单的散点图矩阵,看看一些变量组合是否有用:
例如,您可以看到countours和rgbh1的组合看起来很有希望
在下图中,您可以注意到变量之间也有很强的相关性。(通常,我们喜欢有很多低相关性的变量,而相关变量的数量有限)。饼图显示了相关性有多大-全圈表示1,空圈表示0,我的观点是,如果相关性超过0.4,在模型中同时使用这两个变量可能不是一个好主意)
型号
然后,我使用决策树、随机森林、逻辑回归和神经网络创建了简单的模型(保留Crattle的默认值)。作为输入,我将您的数据与60/20/20分割(培训、验证、测试数据集)一起使用。这是我的结果(如果您不了解错误矩阵,请参考谷歌):
结果
如您所见,总体错误率在6.5%和8%之间波动。我不认为通过调整所用方法的参数可以显著改善这一结果。有两种方法可以降低总体错误率:
- 添加更多不相关变量(建模数据集中通常有100多个输入变量,最终模型中有+/-5-10个)
- 添加更多数据(然后我们可以调整模型,而不会因为过度拟合而害怕)
二手软件:
- R
- 嘎嘎声
#install.packages(“lattice”,dependencies=TRUE)
#安装软件包(“汽车”)
图书馆(格子)
图书馆(汽车)
setwd(“C:/”)
那么照片和图片的区别是什么呢?物体的数量?我得出结论,它们之间的主要区别是颜色的数量。但正如我在前面的问题中所展示的,照片也可以有少量的颜色。。。在大多数情况下,这张照片没有太多锐利的边缘。但这也不是一个问题。你有没有尝试过一些机器学习方法,比如决策树、逻辑回归、神经网络?我认为你必须使用这些方法来更好地解决这个n维问题。你能发布一个数据集,以便任何人都能想出更好的解决方案吗?Trere是一个包含两个文件夹(图片和照片)的归档文件。如果你能测试一下,我会很感激的!您是否能够使用您认为重要的变量(例如颜色数量、空箱子数量、轮廓数量等)和照片/图片标志列(0/1或y/n)创建数据集?我知道如何计算回归或决策树,但我不知道如何从所有图片中收集描述性信息。我想你必须准备这样的数据集。谢谢!我一定会尝试机器学习,因为我想,没有机器学习,很难找到最优解。我读过这样的文章,所以大部分的想法都是从他们那里得到的。
Error matrix for the Decision Tree model on pics.csv [validate] (counts):
Predicted
Actual 0 1
0 167 22
1 6 204
Error matrix for the Decision Tree model on pics.csv [validate] (%):
Predicted
Actual 0 1
0 42 6
1 2 51
Overall error: 0.07017544
Rattle timestamp: 2013-01-02 11:35:40
======================================================================
Error matrix for the Random Forest model on pics.csv [validate] (counts):
Predicted
Actual 0 1
0 170 19
1 8 202
Error matrix for the Random Forest model on pics.csv [validate] (%):
Predicted
Actual 0 1
0 43 5
1 2 51
Overall error: 0.06766917
Rattle timestamp: 2013-01-02 11:35:40
======================================================================
Error matrix for the Linear model on pics.csv [validate] (counts):
Predicted
Actual 0 1
0 171 18
1 13 197
Error matrix for the Linear model on pics.csv [validate] (%):
Predicted
Actual 0 1
0 43 5
1 3 49
Overall error: 0.07769424
Rattle timestamp: 2013-01-02 11:35:40
======================================================================
Error matrix for the Neural Net model on pics.csv [validate] (counts):
Predicted
Actual 0 1
0 169 20
1 15 195
Error matrix for the Neural Net model on pics.csv [validate] (%):
Predicted
Actual 0 1
0 42 5
1 4 49
Overall error: 0.0877193
Rattle timestamp: 2013-01-02 11:35:40
======================================================================
# install.packages("lattice",dependencies=TRUE)
# install.packages("car")
library(lattice)
library(car)
setwd("C:/")
indata <- read.csv2("pics.csv")
str(indata)
# Corrgram
corrgram(indata, order=TRUE, lower.panel=panel.shade,
upper.panel=panel.pie, text.panel=panel.txt,
main="Picture/Photo correlation matrix")
# Scatterplot Matrices
attach(indata)
scatterplotMatrix(~rgbh1+rgbh2+hsvh1+hsvh2+countours|PicFlag,main="Picture/Photo scatterplot matrix",
diagonal=c("histogram"),legend.plot=TRUE,pch=c(1,1))