У меня есть тысячи старых спутниковых изображений Земли, каждая из которых содержал видимый круглый край земли (частично или полностью), и моя цель состоит в том, чтобы извлечь центр (x, y) и радиус этого круга как можно точнее. Конвейер: < /p>
# Load image and grayscale
img = cv2.imread(image_path)
gray = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
height, width = gray.shape
# Mild contrast enhancement
eq = cv2.equalizeHist(gray)
enhanced = cv2.addWeighted(gray, 0.7, eq, 0.3, 0)
# Blur and threshold
blurred = cv2.GaussianBlur(enhanced, (5, 5), 0)
_, thresh = cv2.threshold(blurred, 100, 255, cv2.THRESH_BINARY)
display_image("Thresh", thresh)
# Mask out borders to remove scanning artifacts
border = 200
thresh[:border, :] = 0
thresh[-border:, :] = 0
thresh[:, :border] = 0
thresh[:, -border:] = 0
# Find largest valid contours
contours, _ = cv2.findContours(closed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
earth_mask = np.zeros_like(gray)
for cnt in contours:
if cv2.contourArea(cnt) > 500:
cv2.drawContours(earth_mask, [cnt], -1, 255, -1)
display_image("Earth-mask", earth_mask)
circles = cv2.HoughCircles(
earth_mask,
cv2.HOUGH_GRADIENT,
dp=1.5,
minDist=height,
param1=70,
param2=30,
minRadius=int(height / 4),
maxRadius=int(height / 2)
)
< /code>
Это дает разумные результаты, но не достаточно устойчивые в различных условиях изображения. Я прикрепил изображения для приведенного выше метода. < /P>
Попытка улучшений: < /h1>
Я использую пользовательский метод радиального сканирования из приблизительного центра масс, чтобы получить приблизительный радиус: < /li>
< /ol>
def radial_gradient(img, center, directions=32, stop_count = 3):
radii = []
height, width = img.shape
cx, cy = center
for angle in np.linspace(0, 360, directions, endpoint=False):
x, y = cx, cy
dx, dy = np.cos(angle), np.sin(angle)
r = 0
black_streak = 0
while 0
Что мне интересно: < /h1>
Существует ли лучший трубопровод предварительного обработки, чтобы усилить край Земли для более надежного обнаружения? Окклюзирован? src = "https://i.sstatic.net/owj9za18.png"/>
Подробнее здесь: https://stackoverflow.com/questions/797 ... sing-image
Как надежно обнаружить край Земли (круг) на старых спутниковых изображениях, используя обработку изображений? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как найти центр и радиус Земли на спутниковых изображениях серого с использованием OpenCV?
Anonymous » » в форуме Python - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как найти центр и радиус Земли на спутниковых изображениях серого с использованием OpenCV?
Anonymous » » в форуме Python - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как найти центр и радиус Земли на спутниковых изображениях серого с использованием OpenCV?
Anonymous » » в форуме Python - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как я могу найти центр и радиус на спутниковых изображениях серого? [закрыто]
Anonymous » » в форуме Python - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-