Циклорация из изображений Eye IrisPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Циклорация из изображений Eye Iris

Сообщение Anonymous »

Как я могу найти циклорацию от глаз? У меня есть два изображения: reference_image, test_image. < /P>
Я уже получаю радужную оболочку, используя маску для обрезки районы Iris из изображения. Как я могу сравнить маску двух регионов из справочного и испытательного изображения, чтобы найти вращение радужной оболочки/вращения глаз? Я сделал этот код ниже, но он не вернул правильный угол. Всегда 0,5 дегре. < /P>
def extract_ellipse_region(image, ellipse, output_size=(200, 200)):
"""Extrai a região da elipse da imagem."""
mask = np.zeros_like(image if len(image.shape) == 2 else image[:, :, 0])
cv2.ellipse(mask, ellipse, 255, -1)

# Aplica máscara
result = cv2.bitwise_and(image, image, mask=mask)

# Recorta a região da elipse
x, y, w, h = cv2.boundingRect(cv2.ellipse2Poly((int(ellipse[0][0]), int(ellipse[0][1])),
(int(ellipse[1][0] / 2), int(ellipse[1][1] / 2)),
int(ellipse[2]), 0, 360, 1))
crop = result[y:y+h, x:x+w]

# Redimensiona
crop_resized = cv2.resize(crop, output_size)
return crop_resized

def get_rotation_angle_from_region(img_ref, img_surgery, mask_ref, mask_surgery, debug=False):
contours_ref, _ = cv2.findContours(mask_ref, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours_surg, _ = cv2.findContours(mask_surgery, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

if len(contours_ref) == 0 or len(contours_surg) == 0:
print("Nenhum contorno detectado.")
return None

contour_ref = max(contours_ref, key=cv2.contourArea)
contour_surg = max(contours_surg, key=cv2.contourArea)

ellipse_ref = cv2.fitEllipse(contour_ref)
ellipse_surg = cv2.fitEllipse(contour_surg)

crop_ref = extract_ellipse_region(img_ref, ellipse_ref)
crop_surg = extract_ellipse_region(img_surgery, ellipse_surg)

# Converte para tons de cinza
gray_ref = cv2.cvtColor(crop_ref, cv2.COLOR_BGR2GRAY) if len(crop_ref.shape) == 3 else crop_ref
gray_surg = cv2.cvtColor(crop_surg, cv2.COLOR_BGR2GRAY) if len(crop_surg.shape) == 3 else crop_surg

# Aplica adaptiveThreshold invertido
thresh_ref = cv2.adaptiveThreshold(gray_ref, 255,
cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY_INV,
blockSize=55,
C=2)

thresh_surg = cv2.adaptiveThreshold(gray_surg, 255,
cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY_INV,
blockSize=55,
C=2)

best_angle = 0
best_score = -np.inf
best_rotated = None

cv2.imshow("ref", thresh_ref)
cv2.imshow("refsurg", thresh_surg)

for angle in np.linspace(-30, 30, 121): # de -30° a 30° com passo de 0.5°
(center_x, center_y) = (crop_surg.shape[1] // 2, crop_surg.shape[0] // 2)
M = cv2.getRotationMatrix2D((center_x, center_y), angle, 1.0)
rotated = cv2.warpAffine(thresh_surg, M, (crop_surg.shape[1], crop_surg.shape[0]))

result = cv2.matchTemplate(rotated, thresh_ref, cv2.TM_CCOEFF_NORMED)
score = result[0][0]

if score > best_score:
best_score = score
best_angle = angle
best_rotated = rotated

if debug:
print(f"Melhor ângulo estimado: {best_angle:.2f}° | Score: {best_score:.3f}")
cv2.imshow("Ref adaptThresh", thresh_ref)
cv2.imshow("Surg best match", best_rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

return best_angle


Подробнее здесь: https://stackoverflow.com/questions/797 ... ris-images
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Обратные вызовы API Tobii Eye Tracker 5 C
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Невозможно создать учетную запись на CodeLaboratories.com / Не могу использовать Cl-Eye MultiCam SDK
    Anonymous » » в форуме Javascript
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Нечеткая кластеризация на Python с набором данных Iris
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Нечеткая кластеризация на наборе данных Python с набором данных Iris
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Нечеткая кластеризация на наборе данных Python с набором данных Iris
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»