Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 如何区分照片和图片?_Image Processing_Opencv_Computer Vision - Fatal编程技术网

Image processing 如何区分照片和图片?

Image processing 如何区分照片和图片?,image-processing,opencv,computer-vision,Image Processing,Opencv,Computer Vision,我有以下问题: 我得到一组图像,我需要使用OpenCV库将它们划分为照片和图片(图形) 我已经试过了 要分析RGB直方图(在平均图片中,直方图中有空的箱子) 分析HSV直方图(一般图片颜色不多) 搜索轮廓(平均而言,图片上的轮廓数少于照片上的轮廓数) 所以我有7%的错误(在2000张图片上测试)。我有点困惑,因为我在众多的计算机视觉手段方面没有太多的经验 例如,下面这张照片。它的直方图(RGB和HSV)非常差,轮廓的数量非常少。另外还有很多背景色,所以我需要找到一个对象,只计算它的直方图(我使用

我有以下问题: 我得到一组图像,我需要使用OpenCV库将它们划分为照片和图片(图形)

我已经试过了

  • 要分析RGB直方图(在平均图片中,直方图中有空的箱子)
  • 分析HSV直方图(一般图片颜色不多)
  • 搜索轮廓(平均而言,图片上的轮廓数少于照片上的轮廓数)
  • 所以我有7%的错误(在2000张图片上测试)。我有点困惑,因为我在众多的计算机视觉手段方面没有太多的经验

    例如,下面这张照片。它的直方图(RGB和HSV)非常差,轮廓的数量非常少。另外还有很多背景色,所以我需要找到一个对象,只计算它的直方图(我使用findContours()进行计算)。但在任何情况下,我的算法都会将此图像检测为图片

    还有一个例子:

    图片的问题是噪音。我有小尺寸(200*150)的图像,在某些情况下,噪声是如此明显,以至于我的算法将此图像检测为照片。我尝试过模糊图像,但在这种情况下,由于混合像素,颜色的数量会增加,同时也会减少轮廓的数量(一些模糊的边界变得难以区分)

    图片示例:

    我也尝试过颜色分割和MSER,但我最好的结果仍然是7%


    你能告诉我我还能尝试什么方法吗

    一般建议是增加特征数量(或获得更好的特征),并使用这些特征构建分类器,并使用适当的机器学习算法进行训练。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
    • 嘎嘎声
    用于创建corrgram和scatterplot的代码(使用Crattle GUI生成其他输出):

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