【问题标题】:Convert colormap(RGBa) to height matrix将颜色图(RGBa)转换为高度矩阵
【发布时间】:2021-11-20 16:15:03
【问题描述】:

大家,

我正在尝试将高度颜色图图像 (RGBA) 转换为 2D 矩阵,以便我们对其进行处理。我认为这将是一个完善的程序,但我找不到任何现有的功能来执行此操作。

这是我的颜色图,红色表示较高的区域(峰),蓝色表示较低的区域(谷),范围从(蓝色)-10到(红色)10 um

图像是铣削表面的表面形貌。我们希望通过取矩阵的平均值(算术平均高度)来获得粗糙度 Ra。我们也有 Ra 的测量值,所以我们可以比较看看我们的计算是否正确。

我尝试将 rgb 转换为 hsv,并希望找到高度和色调值之间的某种关系(我确实将色调值转换为 -10 到 10)。但似乎计算出的 Ra 与测量值相差甚远。另外,我在计算图像粗糙度的时候已经把边缘剪掉了。

请问有人知道这个问题吗?首选 Python 或 matlab,但其他平台/语言也可以。

RGBa图片没有相对标注,这里是图片的彩条。 Color scale

【问题讨论】:

  • 你需要精确的颜色比例来创建图像。有各种方法可以从蓝色/低到红色/高,但如果你不使用精确的 1:1 ( color:height) scale 那么你会计算出不正确的结果。如果色标是相对的,您还需要图像上最高点和最低点之间的绝对距离。如果您只看图片,您会丢失太多信息。
  • 感谢您的回复!是的,图像上没有色标。由于我们需要使用图像进行分析,所以我没有把它放在那里,但我们确实在其他地方列出了一个颜色条。图像从 -10 缩放到 10,显示颜色不是相对的。请问这个色标应该怎么用?
  • 然后简单地将每个像素的RGBa值替换为色标对应的高度值。
  • 你有例子吗?一开始我也想过,但不知道如何将mn*4矩阵(RGBa图像)映射到jk矩阵(高度)。我不想逐像素转换,因为我们有 1000 多张图像,我担心它会花很长时间。
  • 您正在将 m*n*4 矩阵转换为 m*n*1 矩阵,并且您必须通过以下方式进行转换像素像素。任何其他涉及更复杂图像处理的方法将花费更多更长的时间并产生更不精确的结果。

标签: python matlab rgb colormap heightmap


【解决方案1】:

有趣的问题。事实证明,Matlab 的 rgb2ind() 函数可以完成 95% 的工作。这个答案基本上基于这个 Matlab Central 帖子:https://www.mathworks.com/matlabcentral/answers/72876-comparing-colors-against-palette#comment_144421(在各种 Matlab Central 帖子中描述了许多其他技术,其中一个可能有各种优点;但是这个非常简单,不需要工具箱)

首先,您需要将颜色条转换为颜色图。您可以使用 [X,cmap] = rgb2ind(RGB,Q) 语法来做到这一点,其中:

  • RGB 是颜色图的彩色图像(首先在您选择的图像编辑器中修剪掉白色边缘)
  • Q 是要提取的颜色数(在您的情况下为 16 个;您可能需要稍微调整一下以处理图像中的一些抖动)
  • X 是颜色条图像,转换为索引颜色(可用于检查颜色图中颜色的顺序)
  • cmap 是颜色图

如果颜色图的顺序不正确(即与值的顺序相对应的顺序),则需要调整矩阵的顺序。这是一个有点手动的步骤,但您只需执行一次。您可能会发现这篇关于绘制色样的 Mathworks 博客文章对此很有帮助:https://blogs.mathworks.com/steve/2020/03/10/how-to-display-color-swatches/

现在您有了颜色图,您可以使用 X = rgb2ind(RGB,inmap) 语法将每个图像转换为索引值,其中:

  • RGB 是数据的彩色图像
  • inmap 是你之前得到的颜色图
  • X 是数据图像,转换为索引颜色

【讨论】:

    猜你喜欢
    • 2011-01-04
    • 2012-11-06
    • 2012-07-07
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2019-07-22
    相关资源
    最近更新 更多