画像から1ピクセルの長さを求めたい

23 visualizzazioni (ultimi 30 giorni)
大輝 隅岡
大輝 隅岡 il 24 Ott 2022
Commentato: 大輝 隅岡 il 28 Ott 2022
背景を方眼紙など長さがわかるものにして撮影し,そこから1ピクセルの長さを求めたいと考えています.撮影した画像から1ピクセルの長さを求めるにはどのようなプログラムを作れば良いでしょうか。
  2 Commenti
Akira Agata
Akira Agata il 24 Ott 2022
イメージビューアーアプリ で方眼の幅のピクセル数を計測することで 1 ピクセルあたりの実測長を算出することができます。あるいは方眼の幅の計測を画像解析の手法で自動的におこないたいということでしょうか?
大輝 隅岡
大輝 隅岡 il 25 Ott 2022
回答ありがとうございます。手動ではなく,自動的に行いたいです.
方眼紙や,あらかじめ大きさがわかっている物を入れて撮影し,そこから1ピクセルの長さを求めたいと考えています.

Accedi per commentare.

Risposta accettata

Akira Agata
Akira Agata il 27 Ott 2022
コメントありがとうございます。
方眼幅のピクセル数を自動的に算出したいとのことですが、以下の方法はいかがでしょうか?
ちなみに、今回のケースは方眼が白色の線ですので平均輝度値のピークを検出していますが、黒線の場合には平均輝度値に -1 を乗算してピークを検出する必要があります。
% 画像読み込み
I = imread('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1167113/9D4EA0FD-F7CC-42AA-8402-55432CB80067.jpeg');
% グレースケール化
I = rgb2gray(I);
% 各列の平均輝度値は、方眼の縦線の位置でピークとなるはず。
% そこで、findpeaks関数でピーク位置を検出する。
% ただし縦線位置以外のピークを誤検出しないため、最小ピーク間隔を50ピクセルに指定
[~, locs] = findpeaks(mean(I), "MinPeakDistance", 50);
% 正しく検出できているか、念のため確認
figure
findpeaks(mean(I), "MinPeakDistance", 50)
xlabel("画像横方向の位置 [ピクセル]")
ylabel("各列の平均輝度値")
% ピーク間隔の平均ピクセル数が求めたい方眼の縦線間隔に相当
w = mean(diff(locs));
% 方眼幅の平均ピクセル数を表示
disp(w)
56.5714
  1 Commento
大輝 隅岡
大輝 隅岡 il 28 Ott 2022
丁寧な回答ありがとうございます.輝度値のピーク点の差から求めるプログラムがとても参考になりました。
このプログラムで頑張ってみます.ありがとうございました.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!