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

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

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Akira Agata
Akira Agata am 27 Okt. 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 Kommentar
大輝 隅岡
大輝 隅岡 am 28 Okt. 2022
丁寧な回答ありがとうございます.輝度値のピーク点の差から求めるプログラムがとても参考になりました。
このプログラムで頑張ってみます.ありがとうございました.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu グラフィックス オブジェクトのプログラミング finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!