Tan*_*iel 2 matlab colors image-processing
我正在做一些图像处理,我需要减少图像的颜色数量.我发现rgb2ind
可以这样做并编写以下代码段:
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);
Run Code Online (Sandbox Code Playgroud)
但输出看起来像这样,我怀疑它只有6种颜色.
它可能在感觉上看起来有超过6种颜色,但真正有6种颜色.如果你看看你的map
变量,它将是一个6 x 3矩阵.每行包含要将图像量化为的颜色.
要仔细检查,请将此图像转换为灰度图像,然后对此图像执行直方图.如果rgb2ind
工作,你应该只在直方图中看到6个尖峰.
顺便说一下,为了能够重建你的问题,你使用了peppers.png
MATLAB系统路径内置的图像.因此,我就是这样描述我正在谈论的内容:
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;
Run Code Online (Sandbox Code Playgroud)
这是我得到的数字:
如您所见,我们的直方图中有6个尖峰.如果在运行代码时确实有6种独特的颜色,那么当您将图像转换为灰度时,应该有相当于6个等效的灰度强度,上面的直方图验证了我们的发现.
因此,您将图像量化为6种颜色,但由于图像的量化噪声,它看起来不像它.