Filter löschen
Filter löschen

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

5 Ansichten (letzte 30 Tage)
大輝 隅岡
大輝 隅岡 am 7 Nov. 2022
Kommentiert: 大輝 隅岡 am 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)

Akzeptierte Antwort

Hernia Baby
Hernia Baby am 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 Kommentar
大輝 隅岡
大輝 隅岡 am 9 Nov. 2022
回答していただきありがとうございました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Convert Image Type 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!