私は、画像上で他の計算を実行する前にノイズの多い背景ピクセルをMRIデータから除外するためにしきい値を計算しようとする、非常に似た問題に取り組んできました。私がしたのは、形状の正確なフィットを維持しながら、スムージングするためにヒストグラムにスプラインを当てていたことでした。私はフィッティングを実行するためにファイル交換からsplinefitパッケージを使用しました。私は一緒に扱われる画像のスタックのヒストグラムを計算しましたが、個々の画像で同様に動作するはずです。ヒストグラムデータの対数変換も使用されましたが、それはアプリケーションにとって有用なステップであるかもしれません。
[my_histogram, xvals] = hist(reshape(image_volume), 1, []), number_of_bins);
my_log_hist = log(my_histogram);
my_log_hist(~isfinite(my_log_hist)) = 0; % Get rid of NaN values that arise from empty bins (log of zero = NaN)
figure(1), plot(xvals, my_log_hist, 'b');
hold on
breaks = linspace(0, max_pixel_intensity, numberofbreaks);
xx = linspace(0, max_pixel_intensity, max_pixel_intensity+1);
pp = splinefit(xvals, my_log_hist, breaks, 'r');
plot(xx, ppval(pp, xx), 'r');
スプラインが微分可能であり、あなたが適切なしきい値を選ぶ手助けするために最大値と最小値を見つけるために有用である誘導体を得るためにppdiffを使用できることに注意してください。 numberofbreaks
は、スプラインがヒストグラムを滑らかにするように比較的低い数値に設定されています。私は例では余白を使ってブレークを選んでいましたが、ヒストグラムのある部分が他の部分よりも大きな曲率を示していることが分かっていれば、その領域でより多くのブレークがあり、ヒストグラム
フィルタリングしようとしているものの画像を投稿できますか? – Phonon
ヒストグラムのビン数を教えてください。 – Phonon