У меня есть набор данных с двумя классами изображений: Городской пейзаж и Пейзаж.Я хочу вычислить градиент (ориентацию) краев каждого изображения и показать, что у изображений городских пейзажей больше вертикальных / горизонтальных краев, чем у пейзажных изображений.
То, что я сделал, рассчитано по вертикали, горизонтали, 45 градусов и 135 градусов края.Я применил фильтр Канни к изображениям, рассчитал градиенты x, y, а также применил порог к изображениям, показывающим, что он показывает края выше этого порога.Результат этой пороговой обработки показан здесь:
Это мой код для манипуляции с этим изображением, а также для вычисления градиентов:
def gradient(image):
# Step 1
img = image
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Step 2
bi = cv2.bilateralFilter(gray, 15, 75, 75)
# Step 3
dst = cv2.Canny(bi, 100, 200)
#print(np.count_nonzero(dst)) #--> make sure it's not all zeroes
# Step 4
#--- create a black image to see where those edges occur ---
mask = np.zeros_like(gray)
#--- applying a threshold and turning those pixels above the threshold to white ---
mask[dst > 0.1 * dst.max()] = 255
# Step 5
img[dst > 0.1 * dst.max()] = [255, 0, 0] #--- [255, 0, 0] --> Red ---
Gx = cv2.Sobel(mask,cv2.CV_64F,1,0,ksize=5)
Gy = cv2.Sobel(mask,cv2.CV_64F,0,1,ksize=5)
#orientation of the edges
theta = np.arctan2(Gy, Gx)
#magnitude
M = np.sqrt(Gx*Gx + Gy*Gy)
#Vertical edges:
v = abs(Gy)
#Horizontal edges:
h = abs(Gx)
#45 Degree edges:
deg45 = M*abs(np.cos(theta - np.pi/4))
#135 Degree edges:
deg135 = M*abs(np.cos(theta - 3*np.pi/4))
print('Vertical:')
#print(v)
print(np.count_nonzero(v))
print('Horizontal:')
#print(h)
print(np.count_nonzero(h))
Что яхочу вычислить v,h,deg45,deg135
для краев, показанных красным на изображении выше (шаг 5).Если это невозможно, то сделайте это для изображения с белыми краями (шаг 4).Кто-нибудь может помочь?
РЕДАКТИРОВАТЬ: Чтобы избежать путаницы, я хочу получить количество вертикальных, горизонтальных и т. Д. Краев в данном изображении, чтобы я мог сравнитьэти цифры для городских пейзажей и пейзажей.