Подсчет белых скоплений по горизонтали в обработанной ткани - PullRequest
1 голос
/ 13 июня 2019

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

Исходное изображение:

enter image description here

Обработанное изображение:

enter image description here

Теперь я хочу найти количество белых кластеров в ряду. Если бы все кластеры были однородными и идеально горизонтальными, я бы запустил цикл для подсчета интенсивностей подъема и спада, чтобы найти количество кластеров, но это не так. требуемый ответ отличается огромным запасом.

Есть ли способ точно подсчитать их по ограничению, что строки не обязательно должны быть идеально горизонтальными? Или следование какому-либо методу упростит задачу?

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

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

 convert fabric.jpg -deskew 50% result.jpg

enter image description here

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

enter image description here

0 голосов
/ 13 июня 2019

Полагаю, вы можете узнать количество подключенных компонентов и получить количество меток, как показано ниже.здесь bp8OO.jpg ваше изображение в градациях серого.Теперь я думаю, что вы можете сделать что-то для этого, чтобы узнать, сколько в каждой строке.

import cv2
import numpy as np

img = cv2.imread('bp8OO.jpg', 0)
img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1]  # ensure binary
ret, labels = cv2.connectedComponents(img)

print("Number of labels" , len(labels))

def show_components(labels):
    # Map component labels to hue val
    label_hue = np.uint8(179*labels/np.max(labels))
    blank_ch = 255*np.ones_like(label_hue)
    labeled_img = cv2.merge([label_hue, blank_ch, blank_ch])

    # cvt to BGR for display
    labeled_img = cv2.cvtColor(labeled_img, cv2.COLOR_HSV2BGR)

    # set bg label to black
    labeled_img[label_hue==0] = 0

    cv2.imshow('labeled.png', labeled_img)
    cv2.waitKey()

show_components(labels)

enter image description here

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