4

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

这是我迄今为止尝试过的:

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).

4

2 回答 2

8

您的第一个问题是您混淆了索引图像(具有颜色图map)和RGB 图像(没有)。您在示例中加载的示例内置图像trees.mat是索引图像,因此您应该使用该函数ind2gray首先将其转换为灰度强度图像。对于 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样子:

在此处输入图像描述

在此处输入图像描述

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

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

smallBW = imresize(BW, [10 10]);  % Resize the image to 10-by-10 pixels
于 2012-08-29T15:50:29.690 回答
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)

结果是:

在此处输入图像描述

于 2012-08-29T15:50:08.693 回答