コンピュータ視覚技術を使用して、非常にノイズの多い画像のストリーム内の小さなブロブを検出(および追跡)するプログラムを作成しようとしています。画像ストリームは、左右のビュー(異なって視準するために異なるサイズ)を出力するデュアルX線イメージングセットアップから来ます。私のデータは2つのタイプのものがあります:1つの画像のセットはそれほど騒々しいものではありません。異なるテクニックを試してみるのですが、もう1つはノイズの多いセットです。画像ストリームは60Hzである。これは、X線撮像装置からの生画像の例である:ノイズの多い画像の小さなブロブを検出する手法
ここにいくつかは、関心領域のサンプルをトリミングしています。検出される必要のあるブロブは、画像の中心付近の小さな黒い点です。
当初、私は非常に有用ではなかったOpenCVの、でシンプルな輪郭/ブロブ検出技術で始まりました。最終的に私は、形態学的演算子を使用して画像を「開く」、続いて関心領域を検出するためにラプラシアン・ガウス・ブロブ検出を行うなどの技術に移った。これは、画像の低ノイズバージョンでは良い結果をもたらしましたが、ノイズの多い画像では失敗します。ここでは、低ノイズ画像の結果があります(入力画像が反転していることに注意してください)。
MATLABでの私の現在のログベースのアプローチのためのコードは以下のようになります:
while ~isDone(videoReader)
frame = step(videoReader);
roi_frame = imcrop(frame, [660 410 120 110]);
I_roi = rgb2gray(roi_frame);
I_roi = imcomplement(I_roi);
I_roi = wiener2(I_roi, [5 5]);
background = imopen(I_roi,strel('disk',3));
I2 = imadjust(I_roi - background);
K = imgaussfilt(I2, 5);
level = graythresh(K);
bw = im2bw(I2);
sigma = 3;
% Filter image with LoG
I = double(bw);
h = fspecial('log',sigma*30,sigma);
Ifilt = -imfilter(I,h);
% Threshold for points of interest
Ifilt(Ifilt < 0.001) = 0;
% Dilate to obtain local maxima
Idil = imdilate(Ifilt,strel('disk',50));
% This is the final image
P = (Ifilt == Idil) .* Ifilt;
は、私はそれが多いイメージに対して動作させるために私の現在の検出技術を向上させることができます任意の方法はあります背景ノイズの?または、このような画像に適したテクニックがありますか?
はカメラであり、固定された場面であり、ブロブだけが動いていますか? – Micka
ブロブの移動速度とフレームレートはどのくらいですか? –
あなたの画像はすべて異なるサイズの理由は何ですか?あなたの画像はストリームの一部なので、私はそれを利用してノイズを減らす必要があると思います。フレームレートに応じて、フレームの最後の数秒の移動平均を基準として、最後の2〜4フレームの平均をとってから、ノイズを除去するように差分をとることを検討します。あなたの設定についてもっと知らないと言うのは難しいです。これは便利かもしれません... http://stackoverflow.com/a/27893051/2836621 –