2015-02-04 4 views
1

Я создаю инструмент для анализа изображений (используя Python). У меня уже есть сегментированные изображения, полученные из порога Otsu. Используя функцию OpenCv kmeans, я уменьшил количество цветов на моем изображении до 4. Предполагается, что одним из кластеров K-средних является черный фон (значения BGR [0,0,0]).Сгладить изображение с использованием OpenCV/Numpy

Из-за алгоритма K-средних фоновые пиксели теперь не [0,0,0], но отображают значения пикселей, например. [0,2,1].

Я хочу, чтобы этот фоновый кластер был абсолютно черным снова. Изображение представлено как массив 3D numpy. В настоящее время я просто итеративно корректирую фон:

X, Y, Z = img.shape 
    for xi in xrange(X): 
     for yi in xrange(Y): 
      if all([value < 10 for value in img[xi][yi]]): 
       img[xi][yi] = np.zeros((1,3), dtype=int) 

Это относительно медленная операция. Есть ли более разумные пути для этого, возможно, используя специализированные функции OpenCV/Numpy?

ответ

2

Вы можете векторизации этой операции так:

In [29]: A = np.random.random_integers(0,10,(2,4,3)) 

In [30]: A 
Out[30]: 
array([[[ 5, 9, 1], 
     [ 4, 0, 2], 
     [ 0, 5, 9], 
     [ 8, 7, 8]], 

     [[ 1, 6, 7], 
     [ 8, 10, 9], 
     [ 2, 10, 1], 
     [ 9, 2, 3]]]) 

In [32]: np.all(A < 5, axis=-1) # I chose a threshold of 5 
Out[32]: 
array([[False, True, False, False], 
     [False, False, False, False]], dtype=bool) 

In [33]: A[np.all(A < 5, axis=-1)] = 100 # and set the values to 100 to easily show what has changed 

In [34]: A 
Out[34]: 
array([[[ 5, 9, 1], 
     [100, 100, 100], 
     [ 0, 5, 9], 
     [ 8, 7, 8]], 

     [[ 1, 6, 7], 
     [ 8, 10, 9], 
     [ 2, 10, 1], 
     [ 9, 2, 3]]]) 

Указав np.all(some_array, axis=-1) вы выполняете all операции над последней осью, которая где значение RGB является. Вы видите, что в этом тестовом массиве был только один такой пиксель (в A[0,1]), где это условие было выполнено.

+0

Это был хороший ответ и привел меня к решению в 2 строках вместо 10. Хорошая работа! – Sander

Смежные вопросы