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

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

Sign in to comment.

Accepted Answer

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

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!