如何将 RGB 或 HEX 颜色代码分组为更大的颜色组集?

2024-02-04

我正在分析大量图像并提取主要颜色代码。

我想将它们分组为通用颜色名称范围,例如绿色、深绿色、浅绿色、蓝色、深蓝色、浅蓝色等。

我正在寻找一种与语言无关的方式来自己实现一些东西,如果有我可以研究的例子来实现这一点,我将非常感激。


在机器学习领域,你想做的事情叫做分类 https://en.wikipedia.org/wiki/Statistical_classification,其中的目标是将其中一个类别(颜色)的标签分配给每个观察结果(图像)。 为此,必须预先定义类。假设这些是我们要分配给图像的颜色:

要确定图像的主色,必须计算其每个像素与表中所有颜色之间的距离。请注意,此距离是在 RGB 颜色空间中计算的。要计算图像的第 ij 个像素与表的第 k 个颜色之间的距离,可以使用以下等式:

d_ijk = sqrt((r_ij-r_k)^2+(g_ij-g_k)^2+(b_ij-b_k)^2)

在下一步中,对于每个像素,选择表中最接近的颜色。这是用于压缩图像的概念索引颜色 https://en.wikipedia.org/wiki/Indexed_color(除了这里所有图像的调色板都是相同的,并且不会为每个图像计算调色板以最小化原始图像和索引图像之间的差异)。现在,正如 @jairoar 指出的那样,我们可以获得图像的直方图(不要与 RGB 直方图或强度直方图混淆),并确定重复次数最多的颜色。
为了展示这些步骤的结果,我使用了这件艺术品的随机裁剪!我的:

enter image description here
This is how images look, before and after indexing (left: original, right: indexed): enter image description here And these are most repeated colors (left: indexed, right: dominant color): enter image description here

But since you said the number of images is large, you should know that these calculations are relatively time consuming. But the good news is that there are ways to increase the performance. For example, instead of using the Euclidean distance https://en.wikipedia.org/wiki/Euclidean_distance (formula above), you can use the City Block https://en.wikipedia.org/wiki/Taxicab_geometry or Chebyshev https://en.wikipedia.org/wiki/Chebyshev_distance distance. You can also calculate the distance only for a fraction of the pixels instead of calculating it for all the pixels in an image. For this purpose, you can first scale the image to a much smaller size (for example, 32 by 32) and perform calculations for the pixels of this reduced image. If you decided to resize images, don not bother to use bilinear or bicubic interpolations, it doesn't worth the extra computation. Instead, go for the nearest neighbor https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation, which actually performs a rectangular lattice https://en.wikipedia.org/wiki/Lattice_(group)#Lattices_in_two_dimensions:_detailed_discussion sampling on the original image. enter image description here

虽然提到的改变会大大提高计算速度,但没有什么是免费的。这是性能与准确性的权衡。例如,在前两张图片中,我们看到最初被识别为橙色(代码 20)的图像在调整大小后已被识别为粉色(代码 26)。
为了确定算法的参数(距离测量、缩小图像尺寸和缩放算法),您必须首先以尽可能高的精度对大量图像执行分类操作,并将结果保留为基本事实。然后,通过多次实验,获得不使分类误差超过最大可容忍值的参数组合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 RGB 或 HEX 颜色代码分组为更大的颜色组集? 的相关文章

  • 使用 python 突出显示图像中的特定文本

    我想突出显示网站屏幕截图中的特定单词 句子 截取屏幕截图后 我使用提取文本pytesseract and cv2 效果很好 我可以获得有关它的文本和数据 import pytesseract import cv2 if name main
  • 在 TensorFlow 中将多个字节读取到单个值中

    我尝试以 TensorFlow 中 cifar10 示例中描述的类似方式读取标签 label bytes 2 it was 1 in the original version result key value reader read fil
  • Java机器学习库可以商用吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道我可以将其用于商业产品的优秀 Java 机器学习库吗 不幸的是 Weka 和 Rapidmin
  • 使用相位相关和对数极坐标变换获得旋转位移

    我一直在编写一个脚本 它使用 cv2 计算两个图像之间的旋转位移phaseCorrelate method 我有两张图像 第二张是第一张图像的 90 度旋转版本 加载图像后 我将它们转换为对数极坐标 然后将它们传递到phaseCorrela
  • 收据褪色部分可以恢复吗?

    我有一些包含一些扫描收据的文件 我需要使用 OCR 从中提取文本 由于收据上打印的文字在一段时间后会褪色 导致收据上的某些文字不清晰 影响OCR结果 褪色单词的一些示例 有什么方法可以恢复褪色的部分 以便提高 OCR 结果吗 我在OpenC
  • 如何使用 OpenCV 检测图像帧中的对象?

    我正在使用 Raspberry Pi 开发一个漫游器 它将清扫房间并捡起掉落在地上的物体 为了检测物体 我使用了在流动站操作开始时拍摄的参考图像 以及每 10 秒单击一次的图像 新图像 为了确定图像帧是否发生变化 我在参考图像和新图像之间进
  • 在 Android 应用程序中编辑/添加 IPTC 元数据

    我看过许多其他类似的问题 但似乎没有一个有准确的答案 我正在开发一个可处理大量图像的 Android 应用程序 我希望通过编辑 IPTC 关键字标签 或其他适当标签 的值来向图像添加信息 我在用元数据提取器 http drewnoakes
  • 查找彼此接近的对象边界

    我正在研究一个计算机视觉问题 其中问题的第一步是找到物体彼此靠近的位置 例如 在下图中 我感兴趣的是找到灰色标记的区域 Input Output 我目前的方法是首先反转图像 然后通过侵蚀进行形态梯度跟随 然后删除一些不感兴趣的轮廓 脚本如下
  • TensorFlow - 为什么这个 softmax 回归没有学到任何东西?

    我的目标是用 TensorFlow 做大事 但我正在尝试从小事做起 我有一些小的灰度方块 有一点噪音 我想根据它们的颜色对它们进行分类 例如 3 个类别 黑色 灰色 白色 我编写了一个小 Python 类来生成正方形和 1 hot 向量 并
  • 用Python识别图像

    我对 OCR 识别和 Python 都有点陌生 我想要实现的是从 Python 脚本运行 Tesseract 以 识别 tif 中的某些特定数字 我以为我可以为 Tesseract 做一些培训 但我在 Google 和 SO 上没有找到任何
  • 使用 StretchDIBits 使用 Delphi 6 处理条形码图像 - 输出中缺少条形线

    我的应用程序是在 Delphi 6 中开发的 由于后台处理和大量数据 它消耗大约 60MB 120MB 物理内存 这是一个资源密集型应用程序 该应用程序的功能之一是在进行某些处理后创建条形码图像 如果用户继续生成条形码 那么至少十分之一的条
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2
  • 多视图几何

    我从相距一定距离的两台相同品牌的相机捕获了两张图像 捕获了相同的场景 我想计算两个相机之间的现实世界旋转和平移 为了实现这一点 我首先提取了两张图像的 SIFT 特征并进行匹配 我现在有基本矩阵也单应性矩阵 然而无法进一步进行 有很多混乱
  • 在我们的 Rails3/Heroku 应用程序中设置 Paperclip + AWS S3 用于图像存储时遇到问题

    我们已经构建了一个 Rails 应用程序 它有多个用户和每个用户的图像 在我们的本地主机上完成所有开发工作 我们为用户和照片提供了工作种子 但现在我们尝试使用 S3 进行图像存储 我们在 总是在 种子 期间遇到错误执行此操作时迁移的步骤 耙
  • 如何在 OpenCV 中从 YUV 文件读取帧?

    如何在 OpenCV 中从 YUV 文件读取帧 我编写了一个非常简单的 python 代码来从二进制文件读取 YUV NV21 流 import cv2 import numpy as np class VideoCaptureYUV de
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率
  • 如何去除给定图像中的噪声,使 ocr 输出完美?

    我已经对这个孟加拉文本图像进行了大津阈值处理 并使用 tesseract 进行 OCR 但输出非常糟糕 我应该应用什么预处理来消除噪音 我也想校正图像 因为它有轻微的倾斜 我的代码如下 import tesserocr from PIL i
  • numpy:大量线段/点的快速规则间隔平均值

    我沿着一维线有许多 约 100 万个 不规则间隔的点 P 这些标记线段 这样 如果点是 0 x a x b x c x d 则线段从 0 gt x a x a gt x b x b gt x c x c gt x d 等 我还有每个段的 y
  • 从包含带边框的表格的图像中提取表格结构

    我正在尝试提取下表中的单元格位置 应用自适应阈值处理后 我能够获得细胞位置周围的轮廓 并且 HoughLines 获得垂直和水平结构元素 这是我的代码 img cv2 imread os path join img path file im
  • 低质量相机的模糊内核

    我正在做一些图像增强实验 所以我用我的廉价相机拍照 相机有马赛克伪像 所有图像看起来都像网格 我认为药盒 失焦 内核和高斯内核不是最佳候选 有什么建议么 EDIT Sample 我怀疑这不能通过恒定的内核来完成 因为对像素的影响并不相同 因

随机推荐

  • 可拖动图钉 Windows Phone 7 bing 地图控件

    只是想知道是否有任何关于如何在 Windows Phone 7 应用程序中为地图编写可拖动图钉的资源 我仔细查看了 只能找到有关如何为浏览器应用程序执行此操作的信息 理想情况下 我希望用户能够单击图钉并将其拖动到地图上的某个位置 但是 目前
  • SQL Server FTI:如何检查表状态?

    在 SQL Server 全文索引方案中 我想知道表是否在 start chage tracking mode update index mode start change tracking and start background upd
  • 如何引用语法中先前匹配的项目?

    我正在尝试解析 BibTeX 作者字段 并将其拆分为单独的作者 这将帮助我重写每个作者的姓名首字母 这是一个最小的例子 use v6 my str Rockhold Mark L and Yarwood RR and Selker John
  • android.support.v4.util.Pair 与 android.util.Pair

    我读到support v4lib 允许 android 向后兼容 因此 IIUC 当存在歧义时 最佳实践始终是从以下位置导入库android support v4 right 是的 这是明智的 但并不总是需要 我这个案例Pair是 API
  • 如何从组件打开 ng-template 模态?

    我有一个用 ng template 包裹的模态
  • 克隆系统调用 OS X 未链接 - 未定义的符号 [重复]

    这个问题在这里已经有答案了 我想使用cloneOS X 上的系统调用 这是一个 Unix 系统调用 所以应该不是问题 对吧 我已经成功尝试使用fork vfork以及其他类似的功能 这是我正在尝试的程序 include
  • 如何使用免费且公开的Rapid API并在flutter Application中调用API

    例如 我订阅了一个名为 https rapidapi com rapidapi api movie database imdb alternative 的免费公共 API 其java代码片段如下 OkHttpClient client ne
  • 初始化空切片的正确方法

    要声明一个大小不固定的空切片 最好这样做 mySlice1 make int 0 or mySlice2 int 只是想知道哪一种是正确的方法 您给出的两个替代方案在语义上是相同的 但是使用make int 0 将导致内部调用运行时 mak
  • 带有 sourcemap 的 Webpack 无法解析生产模式下的变量

    我想使用 Webpack 为我们的生产构建生成源映射 我设法生成它 但是当我在调试器中的断点处停止时 变量未解析 我究竟做错了什么 如何生成一个源映射 让 chrome devtools 在我停止在调试器中的断点处时解析变量 这些是我的 w
  • find_library 或 link_directories 或 find_package?什么是更好的方法?错误 - 使用 cmake 链接库

    Given文件 usr lib gstreamer 0 10 libgstffmpeg so存在在 CMakeLists txt 中进行更改 方法一 find library find library GST FFMPEG 名称 gstff
  • 在数据库中存储数组

    我想知道在数据库中存储数组是否真的是好的做法 我倾向于使用json encode而不是serialize 但只是想知道这是否是一个好主意 如果没有 那么我可以做一些小的更改 然后用逗号将数组内爆 不 这是一种可怕的做法 请不要插入 CSV
  • 方法中的方法

    我正在创建一个带有一些可重用代码的 C 库 并尝试在方法内创建一个方法 我有一个这样的方法 public static void Method1 Code 我想做的是这样的 public static void Method1 public
  • 非本地类型上具有多个条件的 GDB 断点

    我正在调试一个 C C 程序 我想在其中设置一个断点 其条件取决于多个变量 中断 foo cpp 60 if bar 3 i 5 这似乎不起作用 因为它会在遇到 foo cpp 60 时停止 而不是在两个条件匹配时停止 它甚至不匹配其中一个
  • Symfony 3.3 将存储库注入服务

    我有一个包 它保存在私有 Satis 存储库中 因为它的实体和存储库在多个应用程序之间共享 使用该捆绑包的其余应用程序是 Symfony 2 7 和 2 8 应用程序 我正在开发一个新应用程序 要求使用 Symfony 3 3 在 symf
  • 为什么在控制台应用程序中使用 async/await 时需要 AsyncContext?

    我在控制台应用程序中调用异步方法 我不希望应用程序在启动后不久即退出 即在可等待的任务完成之前退出 看来我可以这样做 internal static void Main string args try Task WaitAll DoThis
  • 全局禁用实体框架中的动态代理

    请问如何禁用 Entity Framework 5 中创建的所有实体的动态代理 目前 我正在设置这个espEntities Configuration ProxyCreationEnabled false 在每一个实例中DbContext有
  • 使用柱形图而非蜡烛图的 OHLC 图表的 GGPlot

    我正在研究 R 中的 ggplot 并尝试创建股票图表 我已经能够创建烛台图 现在我想制作条形图 它由一条从低价到高价的垂直线组成 然后 线的左边是开盘价 右边是收盘价 我不知道如何添加这个勾号 我能想到的最接近的东西是 geom erro
  • 如何接受文件 POST

    我正在使用 asp net mvc 4 webapi beta 来构建休息服务 我需要能够接受来自客户端应用程序的发布的图像 文件 使用 webapi 可以吗 以下是我目前正在使用的操作方式 有谁知道这个例子应该如何工作 HttpPost
  • 将地址转换为坐标

    有没有办法用 bing 地图将地址转换为坐标 Thank 从地址到纬度 经度坐标的过程通常称为地理编码 这篇博文有一些使用 Bing 的 WP7 的很好的示例代码 http www braincastexception com wp7 we
  • 如何将 RGB 或 HEX 颜色代码分组为更大的颜色组集?

    我正在分析大量图像并提取主要颜色代码 我想将它们分组为通用颜色名称范围 例如绿色 深绿色 浅绿色 蓝色 深蓝色 浅蓝色等 我正在寻找一种与语言无关的方式来自己实现一些东西 如果有我可以研究的例子来实现这一点 我将非常感激 在机器学习领域 你