画像から1ピクセルの長さを求める精度を上げたい

7 views (last 30 days)
大輝 隅岡
大輝 隅岡 on 7 Nov 2022
Commented: 大輝 隅岡 on 9 Nov 2022
方眼幅のピクセル数を検出するプログラムで,方眼画像の縦方向の輝度値のグラフから白線の幅を検出するプログラムを教えていただいたのですが,
方向でも同じことを行い,データを増やすことで平均ピクセル数を求める精度を上げたいと考えています
このプログラムにどのように追加すればよいでしょうか
わかりにくい説明だと思いますがよろしくお願いします.
% 画像読み込み
I = imread('hougan.jpg');
% グレースケール化
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)

Accepted Answer

Hernia Baby
Hernia Baby on 7 Nov 2022
% 画像読み込み
I = imread('hougan.jpeg');
% グレースケール化
I = rgb2gray(I);
ここでmeanの方向オプションでどの方向に平均をとるか指定します
% 各列の平均輝度値は、方眼の縦線の位置でピークとなるはず。
% そこで、findpeaks関数でピーク位置を検出する。
% ただし縦線位置以外のピークを誤検出しないため、最小ピーク間隔を50ピクセルに指定
[~, locs1] = findpeaks(mean(I), "MinPeakDistance", 50);
[~, locs2] = findpeaks(mean(I,2), "MinPeakDistance", 50);
確認画面ですね
% 正しく検出できているか、念のため確認
figure
findpeaks(mean(I), "MinPeakDistance", 50)
xlabel("画像横方向の位置 [ピクセル]")
ylabel("各列の平均輝度値")
縦方向も見てみましょう
figure
findpeaks(mean(I,2), "MinPeakDistance", 50)
xlabel("画像縦方向の位置 [ピクセル]")
ylabel("各行の平均輝度値")
連結して平均をとります
% ピーク間隔の平均ピクセル数が求めたい方眼の縦線間隔に相当
w = mean([diff(locs1),diff(locs2)']);
% 方眼幅の平均ピクセル数を表示
disp(w)
87.2500
  1 Comment
大輝 隅岡
大輝 隅岡 on 9 Nov 2022
回答していただきありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Find more on Convert Image Type in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!