我想在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)
时最终会得到一张黑色图片。
答案 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
的样子:
对于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)
结果是: