Сегментация изображения лыжного мага - PullRequest
0 голосов
/ 28 марта 2020

У меня есть несколько изображений SEM, которые я пытаюсь сегментировать для поиска функций. Это одна из тех вещей, которые очевидны для человека, смотрящего на это, но не так для компьютера (по крайней мере, одна из них написана мной!). Я надеялся, что кто-нибудь может дать мне возможность подумать об этих проблемах, и об этой, в частности.

Итак, вот простой пример, который работает более или менее независимо от того, что я делаю: good-raw

Я делаю некоторые базовые c обрезки, чтобы избавиться от мета- данные (на самом деле я сначала прочитал, но это кстати). Затем, если я, например, сделаю:

import skimage.filters as filters
threshold = filters.threshold_isodata(image)
seg_image = image > threshold

, я получу массив истинного / ложного, который можно просмотреть как изображение и выглядит так:

good-segmented

(я положил маленькую черную полоску внизу, чтобы вы могли листать взад и вперед с приятным эффектом).

Однако, тот же код на этом изображении:

bad-raw

приводит к такому результату:

bad-segmented

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

Я пробовал различные комбинации:

import skimage.segmentation as seg
import skimage.restoration as res
import skimage.filters as filters
import skimage.morphology as morph
seg_image = np.copy(image)
seg_image = morph.opening(seg_image, morph.disk(2))
seg_image = res.denoise_bilateral(seg_image)
seed = np.copy(seg_image)
seed[1:-1,1:-1] = seg_image.min()
seg_image = seg_image - morph.reconstruction(seed, seg_image)

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

Мои логики c, такие как есть, были:

  • открытие - это путь избавиться от небольших ярких пятен. Небольшой диск может удалить эти маленькие шумовые пиксели в объеме изображения.
  • denoise_bilateral был похож на логи c.
  • , реконструкция предназначена для удаления фона и оставления только переднего плана. К сожалению, это, как правило, включает в себя зашумленные пиксели.

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


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

Хорошее изображение: good-canny

Плохое изображение: bad-canny

Теперь задача состоит в том, чтобы подсчитать вещи внутри этих краев. Подход к заполнению отверстий из здесь (с использованием импорта scipy ndimage в качестве ndi, ndi.binary_fill_holes (seg_image)) терпит неудачу, поскольку он заполняет неправильные области. Но это кажется хорошим подходом.

...