我有一个想在MATLAB中使用它的图像。但是,我正在寻找一种方法,通过该方法我能够自动发现我的图像是二进制(0和1)或连续的。是否有任何代码解决方案?
答案 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
计算直方图。如果直方图中有两个以上不同的灰色值,则图像不是二进制的。