Точки давления ног для обнаружения пронации в изображении сканирования стоп - PullRequest
0 голосов
/ 02 января 2019

Имея проблемы с определением пронации ног в сканированном изображении ног, я попытался отметить точку давления на основе порога и смог получить некоторые результаты, но этот метод не удался на тех изображениях, на которых цвет ног темный.Результат того, что я попробовал: Здесь , но я хочу, чтобы конечный результат выглядел следующим образом Результаты изображений ног .
Любая помощь / предложение будут оценены.
Спасибо

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

1 Ответ

0 голосов
/ 03 января 2019

Недостаточно цветовых различий, чтобы сделать это легко.Я попытался увеличить контраст и преобразовать в цветовое пространство HSV ( info - opencv ), что облегчает выбор цветов.

Результат:

enter image description here

# load image
img = cv2.imread("hand.png")

#increase contrast
new_image = np.zeros(img.shape, img.dtype)
alpha = 4 # Simple contrast control
beta = -300    # Simple brightness control
for y in range(img.shape[0]):
    for x in range(img.shape[1]):
        for c in range(img.shape[2]):
            new_image[y,x,c] = np.clip(alpha*img[y,x,c] + beta, 0, 255)

# convert to HSV
hsv = cv2.cvtColor(new_image, cv2.COLOR_BGR2HSV) 
# set lower and upper color limits
lower_val = np.array([30,0,200])
upper_val = np.array([75,240,255])
# Threshold the HSV image 
mask = cv2.inRange(hsv, lower_val, upper_val)
# remove noise
kernel =  np.ones((3,3),np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

# select whole hand
# set lower and upper color limits
lower_val = np.array([0,0,100])
upper_val = np.array([179,255,255])
# Threshold the HSV image 
mask2 = cv2.inRange(hsv, lower_val, upper_val)

# create a mask that has the whole hand, but not the prssure points
mask_combined = cv2.bitwise_xor(mask, mask2)
# Create a copy of the image
image = img.copy()
# Fill copy image with a blue-green-ish color
image[:] = (150, 150, 20)
# use the combined mask to color in upressured area's of the hand
res2 = cv2.bitwise_and(image,image, mask= mask_combined)
# Fill copy image with red color(set each pixel to red)
image[:] = (20, 20, 205)
# use the pressure mask to color in pressured area's
res = cv2.bitwise_and(image,image, mask= mask)
# combine colored images
final = dst = cv2.add(res2,res)
#show image
cv2.imshow("img", img)
cv2.imshow("result", final)
cv2.imshow("mask", mask)
cv2.imshow("mask2", mask_combined)
cv2.waitKey(0)
cv2.destroyAllWindows()      

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

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