我有一張有星紋的影像,借助邊緣檢測和非最大抑制,我能夠將其轉換為帶邊緣的灰度影像。我需要得到條紋指向的 x 軸的角度。這些是我的圖片
從這個影像我生成包含邊緣的影像。(方向是不同的,因為用于查看天文影像的 ds9 軟體以較低的原點坐標繪制它)
我嘗試了多種方法,包括 PCA 和 Connected components,但結果并不一致。我想要的只是條紋以最小可能誤差定向的平均角度。如果有人可以幫助我,我將不勝感激
uj5u.com熱心網友回復:
以下是一種可能性:
- 黑白門檻
- 尋找輪廓
- 迭代輪廓,將旋轉矩形擬合到每個
- 丟棄小輪廓
- 列印矩形的旋轉角度
#!/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 個區域,所以我只看到大小適中的斑點,而忽略了微小的、無方向的斑點。調這個。
uj5u.com熱心網友回復:
恕我直言,一個選項可以將每個條紋轉換為二維向量,并計算平均角度系數
為了獲得線條,我建議查看霍夫線條方法 https://docs.opencv.org/3.4/d9/db0/tutorial_hough_lines.html
通過一些影像清理和稍微調整函式引數(尤其是最小長度和最大間隙值),您應該能夠獲得這些向量
然后,計算每個向量的傾角 (y2-y1) / (x2-x1),取平均值,然后就可以了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/511624.html
