【问题标题】:RGB image to binary imageRGB 图像转二值图像
【发布时间】:2017-08-29 12:42:42
【问题描述】:

我想在 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) 时,我只是得到一个黑色图像。

【问题讨论】:

    标签: image matlab image-processing rgb


    【解决方案1】:

    您的第一个问题是您混淆了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
    

    【讨论】:

    • 谢谢,我的另一个问题呢:我可以在哪里选择将输出图像设置为 10x10 像素?
    • 很好的答案。谢谢。
    【解决方案2】:

    这是因为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)
    

    结果是:

    【讨论】:

    • 谢谢,我的另一个问题呢:我可以在哪里选择将输出图像设置为 10x10 像素?
    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 2012-04-26
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多