объяснение кода о hough_line и hough_line_peaks - PullRequest
2 голосов
/ 22 апреля 2019

Мне удалось найти эту ссылку: Вычисление угла между двумя линиями в изображении в Python , которое я тогда взял только в той части кода, которая позволяет вычислить угол:

import numpy as np
from skimage.transform import (hough_line, hough_line_peaks, probabilistic_hough_line)
from pylab import imread, gray, mean
import matplotlib.pyplot as plt

image = imread('D:\\Pictures\\PyTestPics\\oo.tiff')
image = np.mean(image, axis=2)

h, theta, d = hough_line(image)

angle = []
dist = []
for _, a, d in zip(*hough_line_peaks(h, theta, d)):
    angle.append(a)
    dist.append(d)

angle = [a*180/np.pi for a in angle]
angle_reel = np.max(angle) - np.min(angle)

print(angle_reel)

Может кто-нибудь объяснить, пожалуйста, код цикла for и angle_reel?потому что я не мог понять, как между какой линией и каким другим объектом внутри изображения образуются множественные углы и эти множественные углы?Было бы очень признательно.

1 Ответ

2 голосов
/ 22 апреля 2019

Ваше изображение состоит из двух строк, я назову их строка a и строка b .Каждая из этих линий будет иметь и угол.Угол между этими линиями будет angle of line a - angle of line b.

Когда ваш код повторяется через hough_line_peaks в, он фактически повторяет данные для каждой строки.У каждой линии есть расстояние и угол.

for _, a, d in zip(*hough_line_peaks(h, theta, d)):
    angle.append(a)
    dist.append(d)

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

Вот пример изображения:

image with two lines

Углы линий: [1.3075343725834614, 0.48264691605429766].Это в радианах, поэтому они конвертируются в градусы с кодом: angle = [a*180/np.pi for a in angle].В градусах углы равны [74.91620111731844, 27.65363128491619].Это кажется довольно разумным: один чуть больше 45 градусов, а другой чуть меньше.Угол между линиями составляет max(angles) - min(angles) или 47,262 градуса.

На этом рисунке показаны углы, нарисованные на изображении:

angles on image

...