Effacer les filtres
Effacer les filtres

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

5 vues (au cours des 30 derniers jours)
大輝 隅岡
大輝 隅岡 le 7 Nov 2022
Commenté : 大輝 隅岡 le 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)

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Convert Image Type dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!