對於一個項目,我需要找到圖像中各行之間的點距。我想到的方法是將圖像轉換爲二進制圖像,並計算每行中黑色背景上的白色像素數。我附加了我的代碼,只要線條非常直,它就可以很好地工作。統計圖像中每行的像素數
順便說一句,這是一個將被分析的樣本圖像。我計劃變成二進制/運行線檢測算法,以找出線中兩條綠色條帶的邊界,因爲它們之間的距離值得關注。
im = imread('http://i.imgur.com/lc8ESac.png'); %// Read image
imBinary = double(im2bw(im)); %// Just in case - Convert to binary,
%// then make double for sum
histogram = sum(imBinary,2); %// Compute row-wise histograms
stem(1:size(imBinary,1), histogram); %// Plot this histogram
xlabel('Row number');
ylabel('White pixel count');
grid;
diffs = diff([0; histogram]);
threshold = 100; %// Define threshold here
rows = find(diffs >= threshold);
此代碼返回的直方圖和峯之間的距離指示線之間的間隔。
爲了糾正彎曲線的問題,我想使用一種分析圖像列(比如100像素)的方法,然後循環直到它循環遍歷整個圖像(0-100列,然後101- 200直到圖像的寬度)。
我有我的僞代碼這裏:
for (loop through rows)
for (loop for coloumns)
count pixels at p(row, col)
end loop for columns
column counter = column counter - 1
if column counter <= 0 then save the number of pixels counter and set column counter = 10
end row loop
然而,作爲一個ChemE大,編碼不是我的強項,我的鬥爭非常符合循環。
我只是希望能夠將上述代碼合併到這個循環中,這樣它就可以將一條彎曲的線分割成許多擬直線,以便能夠計算「平均」或一系列離散線間距。
非常感謝!
嗯:)我知道我認出那個圖像和那個圖像來自某處!我現在要看看你的邏輯,如果我認爲這會奏效,我會提出一些建議。 – rayryeng 2014-09-04 04:00:07
適用於可運行代碼!在'Stackoverflow'的稀有度。 – Divakar 2014-09-04 05:50:02
@rayryeng謝謝!你真的很棒,我非常感謝你的幫助,不幸的是,編碼不是我的優勢之一,它很容易說出我想要做的事情,但是編寫代碼和語法對我來說是一個完全不同的球類遊戲:/ – user3788581 2014-09-04 07:47:00