ラベリングした縞画像の最小平均縞間隔を求められる様な関数はありますか?
Show older comments
はじめまして、今井と申します。
Matlabは初心者のため、皆様のお知恵を拝借させていただきたく、投稿させていただきます。
現在この様な縞画像の「縞の間隔」と「縞の移動速度」を求める為に、プログラムを作製しています。
画像は一定間隔毎に撮影しており時系列データとなっていますが、まずはテスト段階のため1枚で試しています。

お伺いしたい点は
1.ラベリングした縞(線)の最小平均縞間隔を求める関数として、なにか適切なものはあるのか?
2.ラベリングした縞(線)の距離を測る以外で、この「縞の間隔」と「縞の移動速度」を求めるには、どの様な手法が考えられるか?
3.例えば、円柱に貼り付けたシールをMATLAB上で平面化することは可能か?
以下詳細です。
まず参考として「MATLAB画像処理入門―使い方の基本から、画像処理まで (I・O BOOKS) 高井 信勝著」に掲載されている
「第7章 「指紋」の「稜線解析」」をそのまま打ち込んだところ、無事に最小平均縞間隔は算出できましたが、
この380×288pxの画像で処理に1時間近くかかり、非常に効率が悪い点が問題となっています。
現在の環境は
MATLAB・Image Processing Toolbox:R2014b
ですが、プログラムの各処理部分に対して調査したところ、
最新のMATLABには一部が関数として用意されているため、もう少し早く処理が可能かと考えております。
具体的には
画像輝度均一化:imflatfield
↓
画像2値化:imbinarize
↓
細線化&クリーニング:bwskel
↓
ラベリング:bwconncomp labelmatrix

↓
線の最小平均縞間隔算出
なのですが、ここの部分を私は関数で見つけられませんでしたので、もし適切な関数があれば教えてください。
またこの様な方法以外に、「縞の間隔」と「縞の移動速度」を求める手法がありましたら、合わせてご教示ください。
一応、線の最小平均縞間隔算出プログラム部分の抜粋を掲載しておきます。
%線間隔と方位データの算出
[M,N]=size(LaYpart)
distance=[] %(m0,n0)から最小距離(大きさ)を納める初期配列(空ベクトル)
angle=[] %線方位角を納める初期配列(空ベクトル)
for m0=1:M
for n0=1:N
if LaYpart(m0,n0)~=0
dis=[] %(m,n)の画素からの画素間距離(初期の空ベクトル)
for m=1:M
for n=1:N
if LaYpart(m,n)~=0 && LaYpart(m,n)~=LaYpart(m0,n0)
dis=[dis, sqrt((m-m0)^2+(n-n0)^2)] %異なる連結成分の距離データ
end
end
end
min_dis=min(dis) %最小距離
distance=[distance,min_dis] %画素(m0,n0)からの最小画素間距離の集合「d」
%最小距離の方位
for m=1:M
for n=1:N
if LaYpart(m,n)~=0 && LaYpart(m,n)~=LaYpart(m0,n0)
dis12=sqrt((m0-m)^2+(n0-n)^2)
if dis12==min_dis
ang=atan((n0-n)/(m0-m))
break
end
end
end
end
angle=[angle,ang] %画素(m0,n0)からの最小画素間距離の角度「θ」
end
end
end
最後の質問ですが、この縞は曲面にできています。
そこで、予めチェッカーの様なキャリブレーションシールを曲面に貼り付けて撮影し、
その後画角を変えずに連続撮影した際、最初のキャリブレーション画像を用いて、
平面に伸ばしたような画像に変換することは可能でしょうか???
もしくは、実際には画像を平面化処理しなくても、キャリブレーションの値だけ持ち越して、
上記の縞間隔や縞移動速度算出に反映できるでも構いません。
それでは、よろしくお願いいたします。
Accepted Answer
More Answers (0)
Categories
Find more on コンピューター ビジョンと Simulink in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




