2014-01-16 8 views
-1

У меня есть много изображения как this или как this и я использую этот код:Как я могу вычесть фон из изображения в mahotas и opencv в python?

fork = mh.imread(path) 
bin = fork[:,:,0] 
bin = mh.erode(bin) 
bin = (bin < 80) 

для 2-го образа, но я должен использовать это:

bin = (bin < 127) 

для первого.

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

ответ

1

Существует пороговое значение, которое называется порогом Otsu. Here у вас есть дополнительная информация.

Вы можете использовать otsu сделать это в Mahotas или threshold_otsu в scikit-image:

fork = mh.imread(path) 
bin = fork[:,:,0] 
thresh = mh.otsu(bin) 
binary =(bin< thresh) 
+0

Я бы не назвал Оцу «оптимальным», поскольку это не всегда уместно. Возможно, «есть автоматизированный метод ..., который хорошо работает, когда передний план хорошо разделен». – luispedro

+0

Ну, я использовал mh.otsu в первом изображении, и он не работает: левая часть изображения почти вся белая! Может быть, это другой материал? – postgres

+0

Как предложил @luispedro, я удалил слово «оптимальный» – phyrox

0

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

1: Рассчитать закрытие изображения (применение дилатации и эрозии). Используйте структурный элемент как квадрат размером 5x5 для дилатации и эрозии.

C = mh.dilate(bin) 
C = mh.erode(C); 

Это даст вам фон

2: Вычтите фон от исходного изображения:

C = C-bin 

Это даст вам изображение звезды окрашены в белый цвет и фон черный

3: Теперь вычислите автоматический порог для бинаризации. Используйте простой метод Otsu для оценки наилучшего порога. В openCV это примерно так:

double thresh = cv::threshold(im,im,0,255,CV_THRESH_BINARY | CV_THRESH_OTSU); 
cv::threshold(im,im,thresh,255,CV_THRESH_BINARY_INV); 

Это даст вам идеальные результаты для ваших изображений. Не пытайтесь угадать порог. Это не 80, а не 127 для ваших изображений. Использовать Otsu