5

ここに画像の説明を入力してください

次のような静脈画像があります。流域アルゴリズムを使用して、静脈の骨格を抽出します。

私のコード:(Kは元の画像です)。

level = graythresh(K);
BW = im2bw(K,level);
D = bwdist(~BW);
DL = watershed(D);
bgm = DL == 0;
imshow(bgm);

結果は次のとおりです。

ここに画像の説明を入力してください

ご覧のとおり、多くの情報が失われています。誰かが私を助けることができますか?ありがとう。

4

3 に答える 3

8

照明がやや不均一に見えます。これは、特定の形態学的操作を使用して修正できます。基本的な考え方は、不均一な照明だけを表す画像を計算して減算するか、それで除算することです(これによりコントラストも向上します)。照明だけを見つけたいので、十分な大きさの構造化要素を使用することが重要です。これにより、操作ではローカルプロパティではなくグローバルプロパティを調べることができます。

%# Load image and convert to [0,1].
A = im2double(imread('http://i.stack.imgur.com/TQp1i.png'));
%# Any large (relative to objects) structuring element will do.
%# Try sizes up to about half of the image size.
se = strel('square',32);
%# Removes uneven lighting and enhances contrast.
B = imdivide(A,imclose(A,se));
%# Otsu's method works well now.
C = B > graythresh(B);
D = bwdist(~C);
DL = watershed(D);
imshow(DL==0);

これがC(左)、プラスDL==0(中央)、および元の画像へのオーバーレイです。

クロージングで割る 大津の二値化 セグメンテーションオーバーレイ

于 2012-04-16T03:28:12.460 に答える
1

im2bwを適用すると、基本的にuint8、ピクセルの明るさがからの値をとるintmin('uint8')==0画像intmax('uint8')==255をバイナリ画像(logical値のみが使用される)に変換するため、情報が失われます。これはあなたが観察した情報の損失を伴うものです。画像を表示すると、しきい値を超える値を持つBWすべての要素が1になり、しきい値を下回る要素は0になります。Klevel

于 2012-04-15T22:07:57.890 に答える
1

はい、しきい値を下げる必要があります(大津の方法で得られるしきい値よりも低くする必要があります)。また、しきい値を下げたときにエッジマップにノイズが多い場合は、しきい値を下げる前に2Dガウス平滑化フィルターを適用する必要があります。これにより、エッジがわずかに移動しますが、ノイズもクリーンアップされるため、トレードオフになります。

2Dガウス関数は、次のような方法で適用できます。

w=gausswin(N,Alpha)  % you'll have to play with N and alpha
K = imfilter(K,w,'same','symmetric'); % something like these options

残りのアルゴリズムを適用する前に。

于 2012-04-15T21:56:03.247 に答える