Задать вопрос

Компьютерное зрение: Подсчет годичных колец по фотографии среза дерева

Здравствуйте. Встал вопрос подсчета годичных колец по фотографии среза дерева.

Пример исходных данных:
image

После некоторых раздумий пришел к такому алгоритму (без деталей):
  • Обработка изображения фильтрами, приведение к черно-белому изображению;
  • Нахождение центра среза;
  • Двигаясь по прямой от центра среза к краю, считать число периодов смены цвета с черного на белый и обратно;
  • Повторить предыдущий шаг для нескольких прямых с другим углом;
  • Статистическая обработка совокупности значений, полученных на предыдущем шаге.

Обрабатывать изображение я решил библиотекой OpenCV. Опыта решения задач такого рода у меня нет и поиск информации в интернете не помог, поэтому я застрял еще на первом этапе — эксперименты с OpenCV не привели к результату.

Какими фильтрами следует обработать изображение, чтобы привести его к черно-белому и годичные кольца были отчетливо видны? Каким алгоритмом возможно посчитать годичные кольца? Пожалуйста поделитесь своими соображениями и опытом в решении подобных задач. Благодарю.
  • Вопрос задан
  • 5296 просмотров
Подписаться 6 Оценить 5 комментариев
Пригласить эксперта
Ответы на вопрос 4
@gleb_kudr
Я бы не переводил в контрастно черно-белое, а использовал бы greyscale. При любом сечении такой кривой получится кривая с горбиками. Выбираем порог высоты горбика, который учитывается и довольно легко получим количество.
Еще стоит поиграться с каналами, возможно один из каналов будет иметь стабильно больший контраст, чем другие (например, канал насыщенности). Тогда можно даже не переводить в черно-белое, а работать просто с каналом.

Так же необходимо провести диаметры под разными углами, считать значения и усреднять показатели.
Ответ написан
Комментировать
xanep
@xanep
Возьмите пару изображений и поиграйтесь с инструментами типа CVIPTools, применяя различные фильтры. Если вы подберете хороший фильтр, то остальное будет не сложно. Вам нужно выбирать среди фильтров, улучшающих распознавание границ.

Вот что у меня вышло на скорую руку после применения 2-х фильтров

Ответ написан
@Renatk
Идея увеличения точности: виртуально нарисовать ось X и Y через центр дерева и «повращать» изображение относительно этой системы координат. И последить за движением точек (другого цвета колец) у дерева.
Ответ написан
Комментировать
@muzzle
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv;

int main(int argc, const char * argv[]) {

    VideoCapture cap; 
    if(argc > 1) 
        cap.open(string(argv[1])); 
    else 
        cap.open(0); 
    Mat frame; 
    namedWindow("video", 1); 
    for(;;) {
        cap >> frame; 
        if(!frame.data) 
            break; 
        cvtColor(frame, frame, CV_BGR2GRAY);
        threshold(frame, frame, 20, 255, THRESH_BINARY);
        imshow("video", frame); 
        if(waitKey(30) >= 0) 
            break;
    }

    return 0;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы