3

私は解決できないよく知られた問題に直面しています。ルートの写真があります ( http://cl.ly/image/2W3C0a3X0a3Y )。この写真から、最長の根の長さ (1 番目の問題)、大きな根と小さな根の割合 (2 番目の問題である方向としての直径) を % で知りたいと思います。これは多かれ少なかれ研究の目的であるため、細かい根と大きな根を区別できることが重要です(異なる種間で比較された部分)。最後に、測定された最長ルートに沿って線を引き、すべてが正しく測定されているかどうかを確認したいと思います。

最長のルートの長さについては、regionprops() を使用しようとしましたが、これは最適ではありません。これは、これが正しい場合、基本的な形状として楕円形を想定するためです。ただし、実際にサポートが必要になる可能性のあるものは次のとおりです。

最長の根の長さを取得するにはどうすればよいですか (開始点は、最長の根が最大の直径を持つ主根を離れる場所でなければなりません)。細い根と太い根の見分け方と、その部分をとることはできますか?(コイン、画像の丸いものは参考です) 長さや直径などの属性を絵に描いてもいいですか?

楕円などの重心を描く方法を見つけましたが、提案された値でそれを行う方法がわかりません。

これが二重投稿ではないことを願っています。また、この質問がこのように他の場所に存在しないことを願っています。そうであれば、申し訳ありません。

このフォーラムの人々に感謝したいと思います。あなたは素晴らしい仕事をしてくれました。質問がある人は皆、あなたがここにいてくれて幸運です。

助けてくれてありがとう、フィリップ

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% 編集

提案されたソリューションに従いました。これまでのコードは次のとおりです。

clc
clear all
close all

img=imread('root_test.jpg');

labTransformation = makecform('srgb2lab');
labI = applycform(img,labTransformation);

%seperate l,a,b
l = labI(:,:,1);
a = labI(:,:,2);
b = labI(:,:,3);

level = graythresh(l);
bw = im2bw(l);
bw = ~bw;
bw = bwareaopen(bw, 200);
se = strel('disk', 5);
bw2=imdilate(bw, se);
bw2 = imfill(bw2, 'holes');
bw3 =bwmorph(bw2, 'thin', 5);
bw3=double(bw3);
I4 = bwmorph(bw3, 'skel', 200);
%se = strel('disk', 10);%this step is for better visibility of the line
%bw4=imdilate(I4, se);
D = bwdist(I4);

これにより、スケルトンの写真が表示されます-これは大きな進歩です、ありがとう!!! 私は距離を計算しなければならない時点で少し外れています。すべての小さなルートからメイン ルートまでの距離を計算する必要があることを MatLab に説明するにはどうすればよいですか (これを定義する方法は?)。このためには、最初に直径を処理する必要がありますよね?

距離/長さの問題を達成する方法について、どちらかのヒントを教えていただけませんか?

ここまで大変お世話になりました!

フィリップ

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EDIT2

わかりました、シングル ルート パーツを分離することができました。これはあなたの編集が提案したものではありませんが、少なくとも何かです。私はすべての根の合計の長さも持っています - それほど悪くはありません. しかし、(私が思うに)非常に簡単なステップバイステップの説明があっても、私はそのような木を見たことがありません. 目に見えないポイントを選択する必要があるポイントで停止しました-残りは私には高すぎます。これ以上時間を無駄にしたくありません。あなたが私に与えてくれた助けにとても感謝しています。しかし、私はこれを達成するにはMatLabの愚かすぎると思います:)ありがとう!このように続けてください、それは本当に役に立ちます。

フィリップ

4

1 に答える 1

7

開始前のポイントとして、その画像に3439x2439の解像度が必要であるとは思われません。問題に重要なことは何も追加されていないようです。そのため、サイズ変更されたバージョンの800x567で作業しました(ただし、この回答をより大きなバージョンに適用しても(ほぼ)問題ありません)。また、あなたは言及しregionpropsましたが、どのようにしてバイナリイメージを取得したかについての説明は見当たりませんでした。最初から始めましょう。

私はあなたの画像をLAB色空間で検討し、次に大津によってLチャネルを二値化し、前景を黒と見なしてこの結果に拡大を適用し(代わりに侵食を適用することで同じことができます)、最後に小さなコンポーネントを削除しました。Lチャネルは、より直接的な輝度式よりも画像をより適切に表現し、セグメンテーションを容易にします。無関係に見えるかなりの影響があるため、拡張(または侵食)はマイナーな機能を結合するために行われます。これにより、次の画像が生成されました。

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

この時点で、グレートーンアンカースケルトンと組み合わせた距離変換の使用を試みることができます(形態に関するSoilleの本、および/またはRanwezとSoilleによる「バイナリおよびグレートーンアンカースケルトンの順序に依存しないホモトピー間引き」を参照)。しかし、後者は簡単には入手できないので、ここではもっと簡単なことを考えます。上の画像に穴を埋めてから間伐と剪定を行うと、多くの根の間の接続の大まかなスケッチが得られます。次の画像は、元の画像で構成された(そしてより良い視覚化のために拡張された)このステップの結果を示しています。

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

予想通り、薄くなった画像は穴埋めのために「ショートカット」を取ります。しかし、そのようなステップが実行されなかった場合、この画像ではサイクルが発生することになります。ここでは避けたいものです。それにもかかわらず、それは実際の根のサイズにまともな近似を提供するようです。

次に、ブランチ(またはルート)のサイズを計算する必要があります。まず、メインルートがどこにあるかを決定します。これは、拡張前に上記のバイナリイメージを使用し、距離変換を考慮することで実行できますが、ここでは実行されません。私の関心は、これらの長さの計算の実現可能性を示すことだけです。メインルートがどこにあるかがわかっているとすると、特定のルートからそのルートへのパスを見つける必要があります。このパスのサイズは、このルートのサイズです。間引きされた画像から分岐点を削除すると、接続されたコンポーネントの優れたセットが得られることに注意してください。

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

各エンドポイントがルートの終点であると仮定すると、ルートのサイズはメインルートへの最短パスであり、パスは、上記の画像の連結成分のセットで構成されます。これで、このプロセスで計算できる最大のもの、2番目に大きいもの、およびその他すべてを見つけることができます。

編集:

最後のステップを明確にするために、最初に見つかったすべてのブランチにラベルを付けましょう(視覚化を向上させるために新しいタブで画像を開きます)。

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

ここで、各ブランチの「デジタル」長は、単にコンポーネント内のピクセルの量です。後で、画像に追加されたオブジェクトを考慮して、この値を「実際の」長さに変換できます。この時点では、画像処理アルゴリズムにまったく依存する必要はないことに注意してください。この表現からツリーを構築し、そこで作業することができます。ツリーは次の方法で構築されます。1)メインルートに属するスケルトン内の分岐点を見つけます(これは、上の画像のラベル15、16、および17の間の「見えない点」です)。2)そのポイントからそれに接続されている各ブランチへのエッジを作成します。3)他のブランチの開始まで移動するのに必要なピクセルの量に応じて、エッジに重みを割り当てます。4)新しい開始ブランチで繰り返します。たとえば、最初の時点では、ブランチ15、16、および17の先頭に到達するのに0ピクセルかかります。次に、ブランチ15の最初から最後まで到達するには、ブランチ15のサイズ(ピクセル数)を取ります。この時点でこのパスでは他にアクセスするものがないため、リーフノードを作成します。同じプロセスが他のすべてのブランチに対して繰り返されます。たとえば、このラベル付けの完全なツリーは次のとおりです(次のツリーの二重表現の方がはるかにスペース効率が高くなります)。

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

これで、最大のルートのサイズに対応する最大の加重パスが見つかります。

于 2013-01-29T05:15:03.380 に答える