MATLAB で使用したい画像があります。しかし、画像がバイナリ (0 と 1) または連続であることを自動的に検出できる方法を探しています。コードの一部の解決策はありますか?
3 に答える
手始めに、バイナリまたは連続画像について正式に話すことはできません。デジタル画像には、フォーマットとピクセルビット単位の表現に応じて有限値セットから取得された離散値セットがあります。
たとえば、「バイナリ」画像には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
あなたの質問から、あなたは論理クラスまたは二重クラスの画像のみを扱っていると思います。最初のものは実際のバイナリイメージに使用する必要がありますが、残念ながら、実際にコードを使用する場合は常にそうであるとは限りません。
あなたの問題は、doubleクラスの実像(すべて0から1の間のすべての値)またはクラスdoubleとしてのバイナリ画像(すべての値が0または1)を区別することであるように思われます。これを行う最良の方法は、画像の値が1と0しかない場合にtrueを返す次の方法です。
bool = all ((image(:) == 1) + (image(:) == 0));
これは、isbw()
Octaveイメージパッケージのラインで、使用できます。isbw (img, "non-logical")
を使用してヒストグラムを計算しimhist
ます。ヒストグラムに 2 つ以上の異なるグレー値がある場合、画像はバイナリではありません。