0

我有一张想在 MATLAB 中使用的图像。但是,我正在寻找一种能够自动发现我的图像是二进制(0 和 1)或连续图像的方法。有没有一段代码的解决方案?

4

3 回答 3

6

对于初学者,您不能正式谈论二进制或连续图像。数字图像具有一组离散的值,取自有限值集,具体取决于它们的格式和像素逐位表示。

例如,“二值”图像将具有 2 级灰度(白色和黑色),由 0 或 1 或任何其他值组合表示,例如,级别 0、255 的图像仍然是“二值”。8 位表示(即每像素 8 位)的灰度图像将具有从0(黑色)到255(白色)2^8的离散强度级别。minmax

因此,您可以测试唯一灰度级的数量,即输入图像中的唯一值:

I = imread(image_filename); 
if length(unique(I))==2, 
    flag_binary = true 
end 

例子

I = imread('cameraman.tif');
>> disp(flag_binary)
     0
I = imread('circles.png');
>> disp(flag_binary)
     1
于 2012-09-24T03:57:09.233 回答
0

根据您的问题,我猜您只处理逻辑类或双重类的图像。第一个应该用于真正的二进制图像,但不幸的是,在野外使用代码时并非总是如此。

在我看来,您的问题是区分双类的真实图像(0 和 1 之间的所有值)或作为双类的二进制图像(所有值都是 0 或 1)。最好的方法是如果图像只有值 1 和 0,则返回 true:

bool = all ((image(:) == 1) + (image(:) == 0));

这是isbw()您可以使用的 Octave 图像包中的一行isbw (img, "non-logical")

于 2012-09-24T08:54:28.207 回答
0

使用 计算直方图imhist。如果直方图中有两个以上不同的灰度值,则您的图像不是二进制的。

于 2012-09-24T09:26:54.100 回答