二进制或连续图像?

时间:2012-09-24 03:30:38

标签: image matlab image-processing

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

3 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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