【问题标题】:How can I transform a graded colored map into a percentage matrix (convert pixel color into a percentage based on a palette)?如何将分级彩色地图转换为百分比矩阵(将像素颜色转换为基于调色板的百分比)?
【发布时间】:2021-05-19 11:55:41
【问题描述】:

我想将this graded colored map 转换为一个矩阵,其中为每个像素分配一个橙色百分比。尤其是图片右侧的橙色调色板。

我想将 100% 分配给顶部最亮的橙色,将 0% 分配给底部的黑色。因此,我想根据单个像素相对于调色板的颜色为每个像素分配一个百分比。

最后,我的目标是平均这些百分比,以获得橙色的平均百分比。对于后一步,我应该没有任何问题......但我不知道如何面对前一个问题。

我正在寻找 R、Matlab 或 Mathematica 中的解决方案

【问题讨论】:

  • 如果橙色阴影将成为图像中唯一存在的颜色,将所有内容转换为灰度并进行强度直方图可能更容易。这仍然可能与橙色渐变比例有关。

标签: r matlab matrix mapping color-palette


【解决方案1】:

这是我的一个想法。假设你有一张任意颜色的图片;让我们通过运行优化器来解决将颜色从 3 维空间减少到单维空间的转换。代价函数来自于尝试通过有损颜色变换恢复原始颜色时的误差。

我的结果见下图,在最亮的像素处缩放为 100%,在最暗处缩放为 0%。

img = imread('zpiaD.png');
opt = optimset('Display', 'Iter');

itf = fminsearch(@(itf) min_colormap(img, itf) , zeros(1,3), opt);
[~, rimg] = min_colormap(img, itf);

subplot(2,1,1), imshow(rimg), title 'single color dimension'
subplot(2,1,2)
rimg = double(rimg);
imagesc(100 * (rimg - min(min(rimg))) / (max(max(rimg)) - min(min(rimg)))),
colorbar, title 'scaled'

function [res, timg] = min_colormap(img, itf)
  pimg = double(reshape(img, size(img,1)*size(img,2), size(img,3)));
  timg = transpose(itf * pimg');
  res = sum(((timg * itf) - pimg).^2, 'all');
  timg = cast(reshape(timg, size(img,1), size(img,2)), 'uint8');
end

【讨论】:

  • 如果这解决了您的问题,请随时接受我的回答
  • 完成!我不知道这个功能
猜你喜欢
  • 2012-02-17
  • 2016-03-26
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 2014-04-13
相关资源
最近更新 更多