【问题标题】:Reduce number of colors in matlab using rgb2ind使用 rgb2ind 减少 matlab 中的颜色数量
【发布时间】:2017-05-01 12:18:43
【问题描述】:

我正在做一些图像处理,我需要减少图像的颜色数量。我发现rgb2ind可以做到这一点并写了以下sn-p:

clc
clear all
[X,map] = rgb2ind(RGB,6,'nodither');
X = rgb2ind(RGB, map);
rgb=ind2rgb(X,map);
rgb_uint8=uint8(rgb*255+0.5);
imshow(rgb_uint8);

但输出看起来像这样,我怀疑它只有 6 种颜色。

【问题讨论】:

    标签: matlab image-processing colors


    【解决方案1】:

    它可能在感觉上看起来有超过 6 种颜色,但实际上有 6 种颜色。如果您查看您的 map 变量,它将是一个 6 x 3 矩阵。每行都包含您要将图像量化为的颜色。

    要仔细检查,请将此图像转换为灰度图像,然后对该图像进行直方图。如果rgb2ind 有效,您应该只会在直方图中看到 6 个尖峰。

    顺便说一句,为了能够重建您的问题,您使用了 MATLAB 系统路径中内置的 peppers.png 图像。因此,这就是我为描述我所谈论的内容所做的:

    RGB = imread('peppers.png');
    
    %// Your code
    [X,map] = rgb2ind(RGB,6,'nodither');
    X = rgb2ind(RGB, map);
    rgb=ind2rgb(X,map);
    rgb_uint8=uint8(rgb*255+0.5);
    imshow(rgb_uint8);
    
    %// My code - Double check colour distribution
    figure;
    imhist(rgb2gray(rgb_uint8));
    axis tight;
    

    这是我得到的数字:

    如您所见,我们的直方图中有 6 个尖峰。如果运行代码时确实有 6 种唯一颜色,那么当您将图像转换为灰度时,应该有 6 种等效的灰度强度,上面的直方图验证了我们的发现。

    因此,您将图像量化为 6 种颜色,但由于图像的量化噪声,它看起来不像。

    【讨论】:

      【解决方案2】:

      不要怀疑你的结果,图片正好包含 6 种颜色。

      正如 Matlab 文档中所解释的,rgb2ind function 返回一个索引矩阵(您的代码中的X)和一个颜色图(您的代码中的map)。所以如果你想查看X中的颜色数量,你可以简单的查看colormap的大小:size(map)

      在您的情况下,大小将为6x3:在 3 个通道(红色、贪婪和蓝色)上描述 6 种颜色。

      【讨论】:

        猜你喜欢
        • 2013-07-06
        • 1970-01-01
        • 2011-08-19
        • 2016-04-06
        • 2013-09-20
        • 2012-10-08
        • 1970-01-01
        相关资源
        最近更新 更多