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

51 次查看(过去 30 天)
大輝 隅岡
大輝 隅岡 2022-10-24
背景を方眼紙など長さがわかるものにして撮影し,そこから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!