Я использую алгоритм преобразования Хафа для определения линий.
Прямо сейчас я просто беру пиковые значения из матрицы, которые превышают определенный порог, но я получаю много дублирующих строк, которые я хочу объединить в одну.
Это код для поиска пиков:
int prevVal = INT_MIN;
const int NOISE = 110;
enum
{
Ascending,
Descending
} direction = Ascending;
std::vector<Peak>peaks;
for (int x = 0; x < m_matrixWidth - 1; x++) {
for (int y = 0; y < m_matrixHeight - 1; y++) {
double currentValue = m_matrix[x*m_matrixHeight + y];
if (prevVal < currentValue) {
direction = Ascending;
}
else if (prevVal > currentValue) {
if (direction != Descending) {
if (currentValue > NOISE) {
Peak peak(x, y, currentValue);
peaks.push_back(peak);
std::cout << "peak at index " << x*m_matrixHeight + y << ": " << prevVal << std::endl;
}
direction = Descending;
}
}
prevVal = currentValue;
}
}
return peaks;
Вот как это выглядит:
Если кто-нибудь знает, спасибо.