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

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

댓글을 달려면 로그인하십시오.

채택된 답변

Akira Agata
Akira Agata 2022년 10월 27일
コメントありがとうございます。
方眼幅のピクセル数を自動的に算出したいとのことですが、以下の方法はいかがでしょうか?
ちなみに、今回のケースは方眼が白色の線ですので平均輝度値のピークを検出していますが、黒線の場合には平均輝度値に -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
大輝 隅岡
大輝 隅岡 2022년 10월 28일
丁寧な回答ありがとうございます.輝度値のピーク点の差から求めるプログラムがとても参考になりました。
このプログラムで頑張ってみます.ありがとうございました.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 グラフィックス オブジェクトのプログラミング에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!