簡體   English   中英

如何找到圖像中不同邊緣的角度

[英]How to find Angle of Different Edges in an Image

我有一張圖像,其中有一些星形條紋,借助邊緣檢測和非最大抑制,我能夠將其轉換為帶邊緣的灰度圖像。 我需要得到角度 w.r.t。 條紋指向的 x 軸。 這些是我的圖片這是原始圖像

從這個圖像我生成包含邊緣的圖像。 (方位不同是因為ds9天文圖查看軟件plot原點坐標較低) 邊緣檢測圖像

我嘗試了多種方法,包括 PCA 和連接組件,但結果並不一致。 我想要的只是條紋以最小可能誤差定向的平均角度。 如果有人可以幫助我,我將不勝感激

這是以下方法的可能性:

  • 黑白門檻
  • 找到輪廓
  • 遍歷適合每個旋轉矩形的輪廓
  • 丟棄小輪廓
  • 打印矩形的旋轉角度

#!/usr/bin/env python3

import cv2

# Load image as greyscale
im = cv2.imread('trails.png', cv2.IMREAD_GRAYSCALE)

# Threshold for just the brightest things
_, thr = cv2.threshold(im, 192,255,type=cv2.THRESH_BINARY)

# Find contours
contours,hierarchy = cv2.findContours(thr, 1, 2)

# Iterate over contours
for cnt in contours:
    # Get area of blob
    area = cv2.contourArea(cnt)
    # Only work with decent size blobs - ignore smallest ones
    if area > 8:
        center, size, angle = cv2.minAreaRect(cnt)
        print(f'Area: {area}, angle: {angle}')

我得到這些結果:

Area: 10.5, angle: 11.309932708740234
Area: 11.5, angle: 18.43494987487793
Area: 12.0, angle: 14.03624439239502
Area: 74.5, angle: 9.462322235107422
Area: 9.5, angle: 14.03624439239502
Area: 35.0, angle: 11.309932708740234
Area: 30.5, angle: 18.434947967529297
Area: 11.5, angle: 18.43494987487793
Area: 16.0, angle: 18.43494987487793
Area: 9.0, angle: 11.309932708740234
Area: 27.0, angle: 26.56505012512207
Area: 15.5, angle: 21.801410675048828
Area: 9.0, angle: 14.03624439239502
Area: 10.5, angle: 11.309932708740234
Area: 16.0, angle: 18.43494987487793
Area: 32.0, angle: 14.03624439239502
Area: 14.0, angle: 14.03624439239502
Area: 46.0, angle: 11.309932708740234
Area: 25.0, angle: 15.945395469665527
Area: 14.0, angle: 14.03624439239502
Area: 18.0, angle: 90.0
Area: 24.5, angle: 11.309932708740234
Area: 10.0, angle: 14.03624439239502
Area: 36.0, angle: 9.462322235107422
Area: 16.5, angle: 18.43494987487793
Area: 23.5, angle: 11.309932708740234
Area: 11.0, angle: 18.43494987487793
Area: 11.5, angle: 14.03624439239502
Area: 16.5, angle: 14.03624439239502
Area: 12.0, angle: 14.03624439239502
Area: 18.0, angle: 18.43494987487793
Area: 11.5, angle: 14.03624439239502
Area: 23.5, angle: 11.309932708740234
Area: 14.0, angle: 14.03624439239502
Area: 28.0, angle: 11.309932708740234
Area: 18.0, angle: 18.434947967529297
Area: 16.0, angle: 15.945395469665527
Area: 9.0, angle: 15.945395469665527
Area: 10.0, angle: 14.03624439239502
Area: 10.5, angle: 14.03624439239502
Area: 11.0, angle: 14.03624439239502
Area: 8.5, angle: 14.03624439239502
Area: 15.0, angle: 18.43494987487793
Area: 19.0, angle: 14.03624439239502
Area: 20.5, angle: 14.03624439239502
Area: 37.5, angle: 90.0
Area: 34.5, angle: 90.0
Area: 11.5, angle: 14.03624439239502
Area: 27.0, angle: 14.03624439239502
Area: 22.5, angle: 90.0
Area: 8.5, angle: 18.434947967529297
Area: 13.0, angle: 14.03624439239502
Area: 10.0, angle: 15.945394515991211
Area: 12.0, angle: 14.03624439239502
Area: 25.0, angle: 14.03624439239502
Area: 16.0, angle: 90.0
Area: 9.0, angle: 14.03624439239502

我想你可以進一步完善假設和參數,並進一步平滑或統計分析角度 - 但它們似乎平均在 14 度左右

我只是猜測 192 的閾值才能得到一些合理的東西。 調這個。

我只是從稀薄的空氣中提取了最小面積為 8 的區域,這樣我只看到大小合適的斑點,而忽略了微小的、無方向的斑點。 調這個。

恕我直言,一個選項可以將每個條紋轉換為二維向量,並計算平均 angular 系數

為了獲得線條,我建議查看 Hough 線條方法https://docs.opencv.org/3.4/d9/db0/tutorial_hough_lines.html

通過一些圖像清理和微調 function 參數(尤其是最小長度和最大間隙值),您應該能夠獲得這些向量

然后,為每個向量計算傾角 (y2-y1) / (x2-x1),取平均值,這里是 go

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM