您可以执行以下操作:
-
将图像从 RGB 转换为具有 2 种颜色的索引图像:
[X, cmap] = rgb2ind(RGB, 2);
-
将彩色图的索引替换为黑白:
cmap(1, 1:3) = [0, 0, 0]; %Fist color is black
cmap(2, 1:3) = [1, 1, 1]; %Second color is white
-
将索引图像(和地图)写入 PNG 文件:
imwrite(X, cmap, 'K.png');
注意:在将图像和索引图像写入文件时,您需要写入矩阵和颜色图。
-
从 PNG 文件中读取图像(和地图),并将其转换为 RGB 图像:
[I, cmap2] = imread('K.png');
L = ind2rgb(I, cmap2);
这是一个代码示例:
RGB = imresize(imread('peppers.png'), 0.5); %Read input RGB image.
%Convert image to indexed image with 2 color.
[X, cmap] = rgb2ind(RGB, 2);
J = ind2rgb(X, cmap);
%Replace indices of color map:
cmap(1, 1:3) = [0, 0, 0]; %Fist color is black
cmap(2, 1:3) = [1, 1, 1]; %Second color is white
K = ind2rgb(X, cmap);
figure;imshow(RGB);
figure;imshow(J);
figure;imshow(K);
imwrite(X, cmap, 'K.png');
[I, cmap2] = imread('K.png');
L = ind2rgb(I, cmap2);
figure;imshow(L);
为了完成,这里是一个使用你的reference的例子:
[webX, web_cmap] = imread('https://i.stack.imgur.com/zuIra.png'); %Read input image and color map.
RGB = ind2rgb(webX, web_cmap);
%Convert image to indexed image with 4 colors.
[X, cmap] = rgb2ind(RGB, 4);
%Collect histogram
H = histogram(X, 4);
H = H.Values';
%Replace indices of color map: set the color with minimal pixels to white, and other to black.
cmap(H == min(H), :) = 1; %Fist color is black
cmap(H ~= min(H), :) = 0; %Set other three colors to black
%Convert to RGB
bwRGB = ind2rgb(X, cmap);
%Convert to indexed image with only 2 colors:
[X, cmap] = rgb2ind(bwRGB, 2);
imwrite(X, cmap, 'K.png');
[I, cmap2] = imread('K.png');
L = ind2rgb(I, cmap2);
figure;imshow(L);
结果: