Opencv 从纯彩色图像中提取特征

Opencv 从纯彩色图像中提取特征,opencv,image-processing,colors,computer-vision,feature-extraction,Opencv,Image Processing,Colors,Computer Vision,Feature Extraction,我想为基于人工智能的颜色分类提取特征。我知道使用颜色空间直方图作为特征向量,但是使用多个颜色空间直方图会使我的神经网络输入过大。单个RGB颜色空间将为我提供3x256=768个功能。为同一图像的不同变化使用多个颜色空间实在是太多了。我避免使用直方图的平均值,因为我想知道图像的颜色分布。图像只是由颜色组成,没有边缘或物体。欢迎对使用什么算法提出任何建议 这些是我想处理的彩色图像的示例 如果你想只根据颜色进行分类,颜色直方图绝对是正确的选择。您不希望使用整个RGB颜色空间,因为这将产生一个巨大的特征

我想为基于人工智能的颜色分类提取特征。我知道使用颜色空间直方图作为特征向量,但是使用多个颜色空间直方图会使我的神经网络输入过大。单个RGB颜色空间将为我提供3x256=768个功能。为同一图像的不同变化使用多个颜色空间实在是太多了。我避免使用直方图的平均值,因为我想知道图像的颜色分布。图像只是由颜色组成,没有边缘或物体。欢迎对使用什么算法提出任何建议

这些是我想处理的彩色图像的示例

如果你想只根据颜色进行分类,颜色直方图绝对是正确的选择。您不希望使用整个RGB颜色空间,因为这将产生一个巨大的特征空间,正如您已经注意到的那样

相反,您应该首先像前面解释的那样对直方图进行装箱。这将使您的功能空间减少一个您选择的因素


您可以通过排除对您的情况不感兴趣的颜色范围(可能是蓝色~红色),进一步改进结果并减少特征的数量。您还可以根据最常见的颜色中心找到正确的垃圾箱中心,例如通过在颜色空间中执行k-means。

如果您想查看仅基于颜色的分类,颜色直方图绝对是正确的选择。您不希望使用整个RGB颜色空间,因为这将产生一个巨大的特征空间,正如您已经注意到的那样

相反,您应该首先像前面解释的那样对直方图进行装箱。这将使您的功能空间减少一个您选择的因素


您可以通过排除对您的情况不感兴趣的颜色范围(可能是蓝色~红色),进一步改进结果并减少特征的数量。您还可以根据最常见的颜色中心找到正确的垃圾箱中心,例如,在颜色空间中执行k-means。

我认为您的问题在于,您希望通过主色来描述图像的特征,一个不使用任何神经网络的简单分类方案可以找到图片中的主色。下面是一个MATLAB代码片段,介绍了如何执行此操作

image = imread('image.png');
imshow(image);
histR = imhist(image(:,:,1));
histG = imhist(image(:,:,2));
histB = imhist(image(:,:,3));
[~, idxR] = max(histR);
[~, idxG] = max(histG);
[~, idxB] = max(histB);
dominant_colour_feature = [idxR, idxG, idxB] - 1; % 1 is subtracted because of MATLAB indexing scheme
我不确定,你要找什么样的颜色分类。使用这种方法可以简单地对您碰巧使用的图像进行分类。根据您的要求,我们可以进一步修改方案

我在你的一张照片上试过: 输出是254228,0,看起来很像。
也许你在找别的东西

我对你的问题的看法是,你想用主色来描述你的图像,一个不使用任何神经网络的简单分类方案可以在你的图片中找到主色。下面是一个MATLAB代码片段,介绍了如何执行此操作

image = imread('image.png');
imshow(image);
histR = imhist(image(:,:,1));
histG = imhist(image(:,:,2));
histB = imhist(image(:,:,3));
[~, idxR] = max(histR);
[~, idxG] = max(histG);
[~, idxB] = max(histB);
dominant_colour_feature = [idxR, idxG, idxB] - 1; % 1 is subtracted because of MATLAB indexing scheme
我不确定,你要找什么样的颜色分类。使用这种方法可以简单地对您碰巧使用的图像进行分类。根据您的要求,我们可以进一步修改方案

我在你的一张照片上试过: 输出是254228,0,看起来很像。 也许你在找别的东西