图像中的每个像素的rgb值看起来都像[r g b],其中r,g,b是0到255之间的整数值。
现在,让我们定义8个rgb颜色极值:
[0 0 0]黑色
[0 0 255]蓝色
[0 255 0]绿色
[0 255 255]青色
[255 0 0]红色
[255 0 255] magenta
[255 255 0]黄色
[255 255 255]白色。
Matlab中是否有一种有效的方法或Matlab中的一个函数可以将图像转换为具有这8种极端颜色的另一种图像,具有阈值?
答案 0 :(得分:0)
如果您真正想要的是将每个像素颜色分配给人们所说的8种颜色中最接近当前像素的颜色,则应计算每个像素中的颜色与8种颜色中的每种颜色之间的L2距离。感知上均匀的颜色空间,如L a b *。然后,最小距离将是指定的颜色。计算RGB空间中的距离并不符合人们所说的“最接近的颜色”。
https://en.wikipedia.org/wiki/Lab_color_space
您可以使用MATLAB函数pdist2来实现它。
答案 1 :(得分:0)
快速方法是对每个通道进行阈值处理,将其转换为0或1,然后乘以255:
r_threshold = 128;
g_threshold = 117;
b_threshold = 192;
% im is original image
im2(:,:,1) = (im(:,:,1) - r_threshold) > 0; % threshold red channel...
im2(:,:,2) = (im(:,:,2) - g_threshold) > 0; % ... green channel
im2(:,:,3) = (im(:,:,3) - b_threshold) > 0; % ... and blue channel
im2 = im2 .* 255; % change range from [0,1] to [0,255]
进行阈值处理(对于较新版本的MATLAB)的等效但稍微不那么明显的方法是将阈值向量置换为1x1x3向量并执行元素减法:
im2 = (im .- permute([r_threshold, g_threshold, b_threshold], [1 3 2])) > 0;
im2 = im2 .* 255;