画像から1ピクセルの長さを求める精度を上げたい
조회 수: 1 (최근 30일)
이전 댓글 표시
方眼幅のピクセル数を検出するプログラムで,方眼画像の縦方向の輝度値のグラフから白線の幅を検出するプログラムを教えていただいたのですが,
横方向でも同じことを行い,データを増やすことで平均ピクセル数を求める精度を上げたいと考えています.
このプログラムにどのように追加すればよいでしょうか
![](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
채택된 답변
Hernia Baby
2022년 11월 7일
% 画像読み込み
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)
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Template Matching에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!