将彩色图喷射到灰度图
我有一个喷射色彩图:
我想知道是否有某种方法可以转换为灰度。我不能使用平均值,因为最大值和最小值变为相同的灰色。或者是否有某种方法可以转换为另一个调色板。
我在 Google 上找不到转换它的函数。 MATLAB 使用一些名为 rgb2ind 的东西,但我想知道公式。
I have a jet colormap:
and I would like to know if there's some way to convert to a grayscale. I can't use average because maximum and minimum value goes to the same gray color. Or if there's some way to convert to another color palette.
I can't find on Google a function to convert it. MATLAB uses some thing called rgb2ind
but I would like to know the formula.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
首先让我使用 Jet 颜色图创建一个索引图像:
使用 IND2GRAY 进行简单转换会产生以下结果:
正如您所表达的,最小值/最大值收敛到相同的值。据我了解,您正在寻求映射喷射颜色图以线性地从深灰色到浅灰色。为此,我们可以使用通过 RGB2HSV 获得的色调值重新排序功能。将以下内容与原始颜色图进行比较:
First let me create an indexed image using the Jet colormap:
The straightforward conversion using IND2GRAY produces the following:
As you expressed, the min/max converge to the same value. From what I understood, you are looking to map the jet colormap to linearly go from dark to light shades of gray. For this, we can reorder using the hue value which we get with the RGB2HSV function. Compare the following against the original colormap:
在 MATLAB 中创建图像,
将图像保存为 tiff,使用 Paintbrush 裁剪边框并保存为“\directorypath\jetmage.tiff”。
在 MATLAB 中加载图像
获取图像大小
获取每种颜色(红色、绿色和蓝色)的一行图像。
绘制该行每种颜色的强度分布图。
情节应该是这样的:
您可以使用数组
[r,g,b]
作为查找表或以此为基础找出从数组
[r,g,b]
获取“公式”的方法create the image in MATLAB
save the image as tiff, crop out the borders with Paintbrush and save as '\directorypath\jetmage.tiff'.
load the image in MATLAB
get image size
get a row of image for each color, red, green and blue.
plot the intensity profile for each color for that row.
The plot should be something like so:
you can use array
[r,g,b]
as the look-up-table or base on thatfigure out a way to get the 'formula' from array
[r,g,b]
rgb2ind
将每个像素的 RGB 值转换为颜色图中的索引。如果您使用带有颜色图输入的 2 输入版本,那么它将在颜色图中查找与每个像素匹配的最接近的颜色。这基本上会为每个像素提供一个数字,而不是 RGB 值。例如,如果您加载图像
,那么由于 Jet 颜色图是由
jet
返回的,那么您可以使用以下方式获取索引数据然后您可以使用任何颜色图显示图像
不要使用 imagesc因为它可能会过度拉伸图像的动态范围。
rgb2ind
converts the RGB values for each pixel into indices within a color map. If you use the 2 input version with a color map input, then it will look-up the closest color in the color map that matches each pixel. This will basically give you a single number for each pixel, rather than an RGB value.For example, if you load your image
then, since the Jet color map is returned by
jet
, then you can get the indexed data usingYou can then display the image using any color map
Don't use imagesc because it may stretch the dynamic range of your image unacceptably.
teng 给出的答案的 Python 实现(假设默认的 matplotlib jetmap)。
Python implementation of the answer given by teng (assuming a default matplotlib jetmap).