Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

雪片の粒度分布

この例では、粒度分布を使用してイメージ内の雪片のサイズ分布を計算する方法を示します。粒度分布は、最初に各オブジェクトを明示的にセグメント化 (検出) せずにイメージ内のオブジェクトの大きさの分布を決定します。

イメージの読み取り

イメージ 'snowflakes.png' を読み取ります。これは雪片の写真です。

I = imread('snowflakes.png');
imshow(I)

Figure contains an axes. The axes contains an object of type image.

コントラストの強調

最初の手順では、イメージでの強度コントラストを最大化します。これを実行するには、コントラストを制限する適応ヒストグラム均等化を実行する関数 adapthisteq を使用します。データ型の全ダイナミック レンジを満たすように、関数 imadjust を使用してイメージ強度を再スケーリングします。

claheI = adapthisteq(I,'NumTiles',[10 10]);
claheI = imadjust(claheI);
imshow(claheI)

Figure contains an axes. The axes contains an object of type image.

イメージでの表面積強度分布の決定

粒度分布は、雪片の表面積強度分布をサイズの関数として推定します。粒度分布でのイメージ オブジェクトは、サイズが増大する "ふるい" によって取捨選択される石のようなものであり、そのサイズは各パスを通過した後の残りを収集することで決まります。イメージ オブジェクトのふるい分けは、構造体要素のサイズを増加させながらイメージを開き、開いた後で残りの表面積強度 (イメージでのピクセル値の総和) をカウントすることで実行します。

構造体要素のサイズを増大させると表面積強度がゼロになるように、カウンターの制限を選択します。表示目的のために、表面積配列の最初のエントリは空白にします。

radius_range = 0:22;
intensity_area = zeros(size(radius_range));
for counter = radius_range
    remain = imopen(claheI, strel('disk', counter));
    intensity_area(counter + 1) = sum(remain(:));  
end
figure
plot(intensity_area, 'm - *')
grid on
title('Sum of pixel values in opened image versus radius')
xlabel('radius of opening (pixels)')
ylabel('pixel value sum of opened objects (intensity)')

Figure contains an axes. The axes with title Sum of pixel values in opened image versus radius contains an object of type line.

分布の 1 次導関数の計算

2 回連続したオープニング間で表面積強度が大幅に下がる場合は、イメージに小さいオープニングと同じようなサイズのオブジェクトがあるということです。これは、表面積強度配列の 1 次導関数と等しく、イメージには雪片のサイズ分布が含まれています。関数 diff で 1 次導関数を計算します。

intensity_area_prime = diff(intensity_area);
plot(intensity_area_prime, 'm - *')
grid on
title('Granulometry (Size Distribution) of Snowflakes')
ax = gca;
ax.XTick = [0 2 4 6 8 10 12 14 16 18 20 22];
xlabel('radius of snowflakes (pixels)')
ylabel('Sum of pixel values in snowflakes as a function of radius')

Figure contains an axes. The axes with title Granulometry (Size Distribution) of Snowflakes contains an object of type line.

特定の半径をもつ雪片の抽出

グラフの局部的最小値とその半径の値に注意してください。局部的最小値により、その半径をもっている雪片があることが分かります。最小ポイントが負になると、その半径での雪片の累積強度が大きくなります。たとえば、負の最小ポイントは、5 ピクセルの半径マークで発生します。5 ピクセルの半径の雪片は、次の手順で抽出できます。

open5 = imopen(claheI,strel('disk',5));
open6 = imopen(claheI,strel('disk',6));
rad5 = imsubtract(open5,open6);
imshow(rad5,[])

Figure contains an axes. The axes contains an object of type image.

参考

| | | |