2014-01-30 6 views
1

Я использовал выравнивание гистограмм и приспособление для стирания освещения из полутоновых изображений:Почему после выравнивания гистограммы (изображение scikit) и метода Otsu mahotas в некоторых изображениях выходят большие белые квадраты?

import scipy 
import numpy as np 
import pymorph as pm 
import mahotas as mh 
from skimage import morphology 
from skimage import io 
from matplotlib import pyplot as plt 
from skimage import data, img_as_float 
from skimage import exposure 

mhgray = io.imread(path) 
mhgray = mhgray[:,:,0] 

#thresh = mh.otsu(binimg) 
#gray =(binimg< thresh) 
img = color.rgb2gray(mhgray) 
#img = mhgray #binimg 

#from skimage import exposure 
#print dir(exposure) 

# Contrast stretching 
p2 = np.percentile(img, 2) 
p98 = np.percentile(img, 98) 
#img_rescale = exposure.rescale_intensity(img, in_range=(p2, p98)) 
img_rescale = exposure.rescale_intensity(img, out_range=(0, 255)) 

# Equalization 
img_eq = exposure.equalize_hist(img) 

# Adaptive Equalization 
img_adapteq = exposure.equalize_adapthist(img, clip_limit=0.03) 

но после histogram equalization, я использую OTSU метод:

thresh = mh.otsu(binimg) 
gray =(binimg< thresh) 

значение Thresh для следующего примера является: 16329

Источник изображения:

enter image description here

После выравнивания гистограммы и адаптации:

source image

После метода Otsu:

Image after Otsu

Изображение, прежде чем Оцу является массивом uint16, после того, как Оцу является NumPy массив BOOL ,

В stackoverflow я предложил использовать выравнивание гистограммы, чтобы избежать проблем с освещением.

Это для серого фона? Как я могу это исправить?

+0

Пожалуйста, предоставьте копию входного изображения. –

+0

К сожалению: изображение источника: http://i.imgur.com/7AEJTuA.jpg – postgres

+0

другое изображение: http://i.imgur.com/drhsyfL.jpg, и результат: http://i.imgur.com /21tKYJv.png – postgres

ответ

1

Добавление команды дилатации в приведенном выше примере:

import numpy as np 
import pylab as plt 
from skimage import io, color, filter, exposure, morphology 


img = color.rgb2gray(io.imread('7AEJTuA.jpg')) 

threshold = filter.threshold_otsu(img) 

img_bw = img < threshold 

img_bw_thick = morphology.dilation(img_bw, morphology.disk(6)) 

plt.gray() 
f, (ax0, ax1) = plt.subplots(1, 2) 
ax0.imshow(img) 
ax1.imshow(img_bw_thick) 
plt.show() 

я вижу следующее изображение:

enter image description here

+0

Чтобы избавиться от шумовых пикселей, вы также можете использовать http://scikit-image.org/docs/dev/api/skimage.morphology.html?highlight=remove_small#skimage.morphology.remove_small_objects – user2970139

0

Любая причина, по которой вы не используете встроенную функцию Otsu в skimage?

import numpy as np 
import pylab as plt 
from skimage import io, color, filter, exposure 


img = color.rgb2gray(io.imread('7AEJTuA.jpg')) 
img_rescale = exposure.rescale_intensity(img, out_range=(0, 1)) 

threshold = filter.threshold_otsu(img_rescale) 

plt.gray() 
plt.imshow(img_rescale < threshold) 
plt.show() 

Вы также можете посмотреть на skimage.filter.rank.otsu как альтернатива ...

+0

У меня проблема только в том, что следующая строка моего кода: img = mh.morph.close (img, disko), и теперь изображение выглядит вот так: http://stackoverflow.com/questions/ 21371827/why-perform-an-histogram-equalization-by-scikit-image-to-a-binary-image-i-got/21383999? Noredirect = 1 # comment32284340_21383999: Черное изображение. Если я использую расшифровку scikit: img = dilation (img, disk (6)), результат всегда черный! Перед расширением у меня есть массив uint16, после которого uint8: «Warning: Возможная потеря точности при преобразовании с uint16 в uint8». Я выбрал тип по: gray = np.array (серый, dtype = np.uint16), но всегда черный! – postgres

+0

Да, вы не можете масштабировать такие изображения - вам нужно использовать '' img_as_float'', '' img_as_ubyte'', '' img_as_uint'' и т. Д., Что возвращает как правильный тип, так и диапазон. –

+0

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