Посчитай кольца на пне и поймешь сколько лет дереву — это мы знаем с детства. Однако полезная информация, записанная в кольцах, не исчерпывается их количеством. Теплое и влажное лето оставляет широкое кольцо, а холодное и сухое — узкое. Это наблюдение дает две возможности: определять возраст археологических находок (дендрохронология) и восстанавливать климат прошлого (дендроклиматология).
Оба направления очень трудозатратны. Как правило, дендрохронология работает с цилиндрическими образцами древесины (кернами). Каждый керн полируется, затем годичные кольца измеряются с помощью микроскопа. Датировка требует значительного перекрытия между последовательностью годичных колец образца и установленной хронологией, составленной из многих других датированных образцов того же вида древесины в том же регионе. Наращивание такой хронологии — это работа, которая может занимать десятилетия.
Мне стало интересно, можно ли все это ускорить с помощью современного компьютерного зрения. Можно ли уместить всю дендрохронологию в одно приложение на смартфоне? Видимо нельзя, но вот что я узнал в процессе.
Распознавание колец на фото среза можно поставить как задачу сегментации. На эту тему уже есть публикации, некоторые даже с кодом и данными. Однако мои фото пней из леса гораздо хуже по качеству чем то, что получают профессионалы в лаборатории. Надо проверить, разрешима ли задача вообще. Чтобы разобраться с этим, я поставил цель продатировать хоть какое‑то дерево по фотографии со смартфона.
Мой лучший образец — это сосновое бревно из Тимирязевского лесопарка в Москве. Несколько поваленных деревьев распилили, чтобы освободить дорогу. Древесина не выглядит старой, поэтому деревья могли упасть в этом году или пару лет назад, но не раньше. Я не могу показать фото этого спила целиком, так как кто‑то успел украсить его неприличной надписью. Вот кроп из центральной части:

Сначала мне казалось, что все кольца видно прекрасно и ни микроскоп, ни какая‑либо подготовка образца мне не понадобятся, но меня ждало разочарование. В центральной части кольца действительно легко различимы, но на этом срезе больше сотни колец, и нужно измерить все. Если разрешения и качества снимка не хватает, чтобы увидеть хотя бы одно кольцо из сотни, то все измерения после него сдвинутся на год и работа будет испорчена.
После нескольких походов в парк и многих часов разглядывания монитора я сдался, забил на идею использовать только смартфон и купил полировальную машинку на аккумуляторе.

Неприличной надписи больше нет, и кольца считываются гораздо лучше. Кроме того, полировка позволила добавить новый образец: высокий пень стоящий рядом, на котором смола ранее закрывала внешние кольца. С помощью машинки удалось расчистить поверхность и этого среза. Два дерева расположены очень близко и упали в одну сторону, поэтому можно предположить что это произошло одновременно.

Пока сегментация и компьютерное зрение отложены, я размечаю кольца вручную, каждое кольцо как отрезок контура. В идеале, можно было бы выбрать один радиус и отмечать короткие отрезки колец вдоль него, следуя принятой методологии с керном. На практике приходится часто перескакивать с радиуса на радиус, потому что на срезах остается много загрязнений, полировка не доведена до конца, фотографии в расфокусе и так далее. Ширина колец меняется от почти сантиметра до едва различимых глазом долей миллиметра, что требует макрофото на пределе возможностей моего телефона. Тут пригодилась другая покупка — макролинза с креплением на смартфон. Впрочем, я не уверен что линза была необходима. Это зависит от способностей конкретной камеры. Сначала я пользовался labelme для разметки данных, потом навайбкодил свой собственный инструмент, позволяющий склеивать несколько снимков на манер панорамы и размечать все вместе. Это как раз нужно для областей микроскопических колец.

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

После того как все контуры размечены, нужно измерить расстояние между ними, ведь дендрохронологию интересует именно ширина колец. Строго говоря, профессионалы сразу измеряют ширину на своих кернах, но я создал себе лишний этап обработки из‑за того, что начал с labelme и идеи сегментации. Чтобы не погружаться в аналитическую геометрию, я использую питоновскую библиотеку shapely (для каждой точки на контуре, LineString.project проверяет, как эта точка расположена относительно соседнего контура, затем LineString.distance собственно рассчитывает расстояние).
Получив ряд ширин годичных колец, мы переходим собственно к датировке. Идея простая: двигать наши измерения вдоль эталона, пока не найдется совпадение. Эталоном служит либо отдельный продатированный образец, либо усреднение многих — мастер‑хронология. Подобрав правильный сдвиг, мы узнаем в каком году упало дерево. Однако, есть проблемы. Во‑первых, кольца в среднем шире ближе к сердцевине, потому что молодые деревья растут быстро. Это не даст правильно совмещать последовательности по максимальной кросс‑корреляции. Датировка может показать, что все деревья начали рост одновременно, нам такого не надо. Эта проблема обходится процедурой которую называют детрендинг или нормализация. Я потратил некоторое время, мучаясь с детрендингом сплайнами, но затем нашел вот эту страницу и переключился на трансформацию P2Yrs
Оказалось, что так работает гораздо лучше. По‑видимому, перед датировкой полезно избавиться от всей низкочастотной информации, как и делает P2Yrs. Сплайны могут быть нужны для задач вроде реконструкции климата, где низкочастотный сигнал тоже важен.

Другая проблема состоит в том чтобы найти подходящую мастер‑хронологию. Такие данные есть в International Tree‑Ring Data Bank

На сайте ITRDB есть замечательная интерактивная карта. Она показывает как исследования сбиваются в группы по интересующим науку регионам, или местам где расположены дендрохронологические лаборатории. По‑видимому это Германия, Швейцария и Литва. По Европейской России данных не так много. Большая часть происходит из одной публикации (Соломина и др.).
Интересующие меня деревья — сосна обыкновенная или Pinus sylvestris, в дендрохронологии используется сокращение PISY. Это самый распространенный вид в ITRDB в нашем регионе. Ближайшие к Москве маркеры на карте это Звенигород, Озёры и Приокско‑Террасный заповедник, и все это PISY. То что удалось найти несколько хронологий нужного вида на сравнительно небольшом расстоянии (40–120км) — большая удача. Как всегда, москвичам можно только позавидовать.
Для каждой локации ITRDB предоставляет.rwl файл с датированными последовательностями измерений ширин колец. Я загружаю эти файлы, обрабатываю их так же, как и мои собственные данные, затем рассчитываю коэффициент корреляции r в зависимости от сдвига. Полноценный анализ также включает расчет t‑статистик, но я опускаю эту часть. Вместо этого надеюсь получить высокий пик на графике корреляции, по которому будет сразу понятно что найден правильный сдвиг и других вартиантов датировки нет.

Вот так выглядит лучшее наложение последовательности с моего бревна на мастер‑хронологию (r=0.55, последний год 2024). Это не так красиво, как примеры которые я видел в книжках, и кажется вручную я бы его не нашел. С другой стороны, график корреляции выглядит убедительно, как я и рассчитывал, с единственным пиком. Значит, мои измерения согласуются с данными ITRDB.

С большим пнем пришлось повозиться. Сначала корреляционный анализ давал дату в будущем, затем 2025, но после исправления всех моих ошибок в разметке я вышел на результат r=0.44, 2024 год. Деревья действительно упали в одновременно. При 166 кольцах, первое из них соответствует 1859 году, то есть этот пень начал свой жизненный путь при Александре II. Это дерево старше отмены крепостного права!
Идеи по поводу дендрохронологического приложения пока отложены, и вся затея оказалась гораздо сложнее, чем я ожидал. Тем не менее, я довел датировку до конца и это был интересный опыт в анализе данных, а также повод выбраться на улицу. Этот проект скорее всего было бы невозможно сделать еще 10 лет назад, но сейчас, благодаря совершенству современных камер, вайбкодингу и данным на ITRDB, дендрохронология становится открыта каждому.

