2016-03-24 7 views
1

У меня есть большое количество изображений в оттенках серого, которые показывают яркие «волокна» на более темном фоне. Я пытаюсь определить количество «волокон». Поскольку они перекрываются почти повсеместно, невозможно будет подсчитать количество волокон, поэтому вместо этого я хочу прибегнуть к простому подсчету того, насколько большая доля площади белых волокон сравнивается с полным изображением (например, это 55% белое, другое один с меньшим количеством волокон составляет всего 43% белого и т. д.). Другими словами, я хочу количественно определить плотность волокон в изображении.Найти «долю ярких пикселей» в изображении (порог?)

Пример фотографий:

Высокая плотность: https://dl.dropboxusercontent.com/u/14309718/f1.jpg

пониженная плотность: https://dl.dropboxusercontent.com/u/14309718/f2.jpg

я понял простую (адаптивный) пороговый фильтр будет делать работу хорошо, просто преобразование изображения в чисто черный/белый, а затем подсчет доли белых пикселей. Тем не менее, мой ответ, кажется, почти полностью зависит только от порогового значения, которое я выбираю. Я сделал несколько быстрых экспериментов, взяв большое количество различных пороговых значений и обнаружил, что на всех изображениях доля белых пикселей почти равна линейной функции порогового значения. Другими словами - я могу получить любой ответ, который я хочу, между примерно 10% и 90% в зависимости от порога, который я выбираю.

Это, очевидно, не очень хороший подход, потому что мои результаты чрезвычайно предвзяты, так как я выбираю порог и поэтому совершенно бесполезен. Кроме того, у меня есть около 100 этих изображений, и я не собираюсь пытаться выбрать «правильный» порог для всех из них вручную.

Как я могу улучшить этот метод?

ответ

2

Поскольку изображения сложны, а контуры волокон нечеткие, мало надежд на получение «точного» измерения.

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

Это исключает вмешательство человека в настройку порога.

Мой лучший совет - полагаться на порог Otsu, который очень хорош в поиске значимых фоновых и передних интенсивностей и довольно независим от освещения.

Улучшение контрастности перед Otsu следует избегать, потому что бинаризация коммутирует с усилением контраста (так что нет никакой реальной выгоды), но усиление контраста может ухудшить изображение, насыщая местами.

+0

Спасибо. Я думаю, что размытость контуров - это именно та проблема, с которой я столкнулся, потому что увеличение порога, по-видимому, приводит к простому учету большего количества волокна (например, больше расплывчатого края подсчитывается), поэтому имеет смысл, что это так в зависимости от порога. Разве нет ничего конкретного в этой проблеме? Нечеткость должна быть очень похожа на все изображения, поэтому, возможно, это алгоритм, который смотрит на градиент от черного до белого и выбирает какое-то промежуточное значение как «край»? Я понятия не имею, как это может быть достигнуто только «мозговым штурмом». Я посмотрю на порог Отсу. –

+0

@NickThissen: не беспокойтесь о нечетких краях, просто используйте эмпирическое измерение. Повторяемость важнее любой «правильности». –

0

Просто вторя мысль @YvesDaoust»на самом деле - и предоставляя некоторые конкретные примеры ...

Вы можете создавать гистограммы изображений с помощью ImageMagick, который установлен на большинстве дистрибутивов и доступно для OSX и Windows. Я просто делаю это в командной строке, но мощно и легко запускать некоторые тесты и посмотреть, как работает предложение Yves для вас.

# Make histograms for both images 
convert 1.jpg histogram:h1.png 
convert 2.jpg histogram:h2.png 

enter image description here

enter image description here

Да, они довольно бимодальным - так Оцу пороговая должен найти порог, который максимизирует дисперсию между-класса. Используйте скрипт otsuthresh с сайта Фред Weinhaus' here

./otsuthresh 1.jpg 1.gif 
Thresholding Image At 44.7059% 

./otsuthresh 2.jpg 2.gif 
Thresholding Image At 42.7451% 

enter image description here

enter image description here

Count процент белых пикселей в каждом изображении:

convert 1.gif -format "%[fx:int(mean*100)]" info: 
50 

convert 2.gif -format "%[fx:int(mean*100)]" info: 
48 

Не то блестящее различие! Mmmm ... Я попытался добавить медианный фильтр, чтобы уменьшить шум, но это не помогло. У вас есть ваши изображения в формате PNG, чтобы избежать неприятных артефактов?