画像から1ピクセルの長さを求める精度を上げたい
1 view (last 30 days)
Show older comments
方眼幅のピクセル数を検出するプログラムで,方眼画像の縦方向の輝度値のグラフから白線の幅を検出するプログラムを教えていただいたのですが,
横方向でも同じことを行い,データを増やすことで平均ピクセル数を求める精度を上げたいと考えています.
このプログラムにどのように追加すればよいでしょうか
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1183723/image.jpeg)
わかりにくい説明だと思いますがよろしくお願いします.![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1183693/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1183693/image.png)
% 画像読み込み
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)
0 Comments
Accepted Answer
Hernia Baby
on 7 Nov 2022
% 画像読み込み
I = imread('hougan.jpeg');
% グレースケール化
I = rgb2gray(I);
% 各列の平均輝度値は、方眼の縦線の位置でピークとなるはず。
% そこで、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)
More Answers (0)
See Also
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!