Как надежно обнаружить край Земли (круг) на старых спутниковых изображениях, используя обработку изображений?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как надежно обнаружить край Земли (круг) на старых спутниковых изображениях, используя обработку изображений?

Сообщение Anonymous »

У меня есть тысячи старых спутниковых изображений Земли, каждая из которых содержал видимый круглый край земли (частично или полностью), и моя цель состоит в том, чтобы извлечь центр (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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»