首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >利用rgb2ind减少matlab中的颜色数

利用rgb2ind减少matlab中的颜色数
EN

Stack Overflow用户
提问于 2014-09-06 23:29:54
回答 2查看 1.4K关注 0票数 2

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

代码语言:javascript
运行
复制
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种颜色。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-07 00:35:35

从视觉上看,可能有6种以上的颜色,但实际上有6种颜色。如果你看看你的map变量,它将是一个6x3矩阵。每行包含要量化图像的颜色。

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

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

代码语言:javascript
运行
复制
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种颜色,但它不像它,因为量化噪音的图像。

票数 5
EN

Stack Overflow用户

发布于 2014-09-07 00:40:18

不要怀疑你的结果,该图像包含确切的6种颜色。

正如Matlab文档中所解释的那样, function返回一个索引矩阵(代码中的X)和一个颜色映射(代码中的map)。因此,如果您想检查X中的颜色数,只需检查颜色图:size(map)的大小即可。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25705705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档