我有一张想在 MATLAB 中使用的图像。但是,我正在寻找一种能够自动发现我的图像是二进制(0 和 1)或连续图像的方法。有没有一段代码的解决方案?
问问题
231 次
3 回答
6
对于初学者,您不能正式谈论二进制或连续图像。数字图像具有一组离散的值,取自有限值集,具体取决于它们的格式和像素逐位表示。
例如,“二值”图像将具有 2 级灰度(白色和黑色),由 0 或 1 或任何其他值组合表示,例如,级别 0、255 的图像仍然是“二值”。8 位表示(即每像素 8 位)的灰度图像将具有从0(黑色)到255(白色)2^8
的离散强度级别。min
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
于 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 回答