【问题标题】:Converting gray scale image to BW image将灰度图像转换为 BW 图像
【发布时间】:2016-07-21 03:22:14
【问题描述】:

我想将灰度图像 (​​uint16) 转换为黑白图像。

[level, ] = graythresh(I);
I_bw      = im2bw(I, level);

图片下方

我不明白图像 I_bw 的结果如何可能如下:

注意level在调用graythresh(I)后等于0。

编辑:我已经上传了包含原始图像的 .mat 文件。 file

【问题讨论】:

  • 你确定你使用的是正确的I吗?使用您提供的图像,我的等级为0.5137I = imread('http://i.stack.imgur.com/Vch35.jpg');level=graythresh(I);im2bw(I,level);
  • 我确定。我上传的是 .JPG 版本,而不是原始版本。我可以上传 .fig 文件吗?
  • 那么我们如何测试任何东西呢?请上传您正在使用的图片。
  • 有没有办法上传.mat文件或.fig文件?
  • 好吧,一个 .fig 文件在这里不会有太大帮助,因为这并不是任何东西的真正输入。您可以将 .mat 文件上传到谷歌驱动器或保管箱或其他东西。您也可以尝试另存为 PNG(无损压缩)

标签: image matlab


【解决方案1】:

原因是:level = 0

load Image.mat

I = z;
figure;imshow(I, []);

[level, ] = graythresh(I); %level = 0
I_bw      = im2bw(I, level);
figure;imshow(I_bw);impixelinfo

以下代码有效:
I转换为double,并将其归一化为范围[0, 1]。

load Image.mat

I = z;
figure;imshow(I, []);

I = double(I)/double(max(I(:))); %Convert to double, and divide by maximum value - set range to [0, 1].

[level, ] = graythresh(I);

I_bw      = im2bw(I, level);
figure;imshow(I_bw);impixelinfo

结果:

以下代码也可以:

load Image.mat

I = z;
figure;imshow(I, []);

I = double(I)/double(max(I(:))); %Convert to double, and divide by maximum value - set range to [0, 1].
I = uint16(I*2^16-1); %Expand range to [0, 2^16-1] and convert to uint16.

[level, ] = graythresh(I);

I_bw      = im2bw(I, level);
figure;imshow(I_bw);impixelinfo

了解为什么level = 0,在原始代码中需要进一步调查......

【讨论】:

  • @Alessandro 我更新了我的答案,但我仍然不知道为什么 level = 0。
猜你喜欢
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
相关资源
最近更新 更多