% 画像読み込み
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)