RGB图像到二进制图像

时间:2012-08-29 15:39:33

标签: image matlab image-processing rgb

我想在MATLAB中加载RGB图像并将其转换为二进制图像,我可以在其中选择二进制图像具有多少像素。例如,我将300x300 png / jpg图像加载到MATLAB中,最终得到的二进制图像(像素只能是#000或#FFF)可能是10x10像素。

这是我到目前为止所尝试的:

load trees % from MATLAB
gray=rgb2gray(map); % 'map' is loaded from 'trees'. Convert to grayscale.
threshold=128;
lbw=double(gray>threshold);
BW=im2bw(X,lbw); % 'X' is loaded from 'trees'.
imshow(X,map), figure, imshow(BW)

(我从互联网搜索中得到了一些上述内容。)

我在执行imshow(BW)时最终会得到一张黑色图片。

2 个答案:

答案 0 :(得分:8)

您遇到的第一个问题是indexed images(有色图map)和RGB images(不是)。您在示例中加载的示例内置图像trees.mat是一个索引图像,因此您应该使用函数ind2gray将其转换为grayscale intensity image。对于RGB图像,函数rgb2gray也会这样做。

接下来,您需要确定用于将灰度图像转换为二进制图像的阈值。我建议使用函数graythresh,它将计算插入im2bw(或更新的imbinarize)的阈值。以下是我将如何完成您在示例中所做的事情:

load trees;             % Load the image data
I = ind2gray(X, map);   % Convert indexed to grayscale
level = graythresh(I);  % Compute an appropriate threshold
BW = im2bw(I, level);   % Convert grayscale to binary

以下是原始图片和结果BW的样子:

enter image description here

enter image description here

对于RGB图像输入,只需将ind2gray替换为上述代码中的rgb2gray

关于调整图像大小,可以使用图像处理工具箱功能imresize轻松完成,如下所示:

smallBW = imresize(BW, [10 10]);  % Resize the image to 10-by-10 pixels

答案 1 :(得分:0)

这是因为gray的范围为[0,1],而threshold的范围为[0,256]。 这会导致lbw成为false的大数组。这是一个解决问题的修改代码:

load trees % from MATLAB
gray=rgb2gray(map); % 'map' is loaded from 'trees'. Convert to grayscale.
threshold=128/256;
lbw=double(gray>threshold);
BW=im2bw(X,lbw); % 'X' is loaded from 'trees'.
imshow(X,map), figure, imshow(BW)

结果是:

enter image description here