Php 按颜色对图像排序

Php 按颜色对图像排序,php,image,rgb,histogram,Php,Image,Rgb,Histogram,我正在寻找一种对图像进行排序的方法,如以下屏幕截图所示: 我已经看过了stackoverflow这个主题的所有线程,但是没有一个建议的解决方案能接近上面的图片 我尝试过的方法: 对于每个图像,按出现的降序构建rgb颜色的直方图 对于每个直方图,计算与黑色的距离(r:0,g:0,b:0),如下所示: for color in image_histogram: total_distance += color.percentage_of_image * distance(BLACK_RGB, c

我正在寻找一种对图像进行排序的方法,如以下屏幕截图所示:

我已经看过了stackoverflow这个主题的所有线程,但是没有一个建议的解决方案能接近上面的图片

我尝试过的方法:

  • 对于每个图像,按出现的降序构建rgb颜色的直方图
  • 对于每个直方图,计算与黑色的距离(r:0,g:0,b:0),如下所示:

    for color in image_histogram:
      total_distance += color.percentage_of_image * distance(BLACK_RGB, color.rgb)
    
  • 然后按距离对图像进行排序

    我希望类似颜色分布的图像最终会有相似的距离,并根据颜色进行视觉排序。事实并非如此,这似乎有些效果,但与上图不同

    对于距离函数,我尝试了欧几里德距离、hsv排序(h->s->v)甚至实验室距离排序。这些都没有帮助


    如果有人有更好的方法,我很想知道

    使用相似颜色之间的距离(而不是它们与黑色之间的距离)对相似颜色进行分组,并使用图像中的平均颜色。

    我自己从未做过类似的事情,因此如果以下方法很幼稚,请原谅我:

    • 对于每个图像,将所有像素的R、G、B值相加,然后除以总像素,将其归结为1个平均RGB值。将组件规格化为[0..1]
    • 基于RGB值在2D颜色空间中打印图像。这可以是3D(r、g、b)矢量变换的2D投影

    您可能想查看ImagePlot。我不确定系统背后的算法是否可用,但你当然可以下载并通过免费软件运行你的图像采集来分析它们

    这个软件被用于大量图像收集的许多有趣的可视化,数以百万计+

    信息:
    来源:

    您可以转换为HSV并按H排序

    色调是大多数人想到“颜色”时想到的


    参阅:

    这不是标记为Python,但中间的循环看起来像Python。在PHP和画布中使用HTML5和JavaScript,可以获得图像的平均RGB颜色。从那里你可以把所有的值加在一起,除以3得到你的图像的亮度。您将沿y轴从亮到暗排列所有值,并沿x轴执行从r到g到b的色调变换。只是一个想法,在我完成我目前的项目后,我可能会做这个,谢谢你的想法!感谢Vap0r,这里有一个更清楚的例子来说明我在寻找什么:问题中的链接是broken我认为中间色而不是平均色会更好,否则一些边缘情况看起来会不合适。当然,除非这是他想要的,在他的例子中很难看到。寻找主导色。这个链接建议使用“平滑”直方图上的最大点:但我不明白他们描述的平滑方法是什么链接中建议的方法是通过平均像素实现的简单模糊。我相信链接的问题回答了你的疑问。是的,我也在按照这些思路思考。他所描述的是一个向下1D的投影。示例照片看起来确实像是投影到2D。我在玩这样的游戏:
    x=h*s
    y=v*s
    作为投影。但可能有更好的方法。有趣的是,我会尝试两种方法