>  기사  >  기술 주변기기  >  이미지 처리 작업에서 Wasserstein 거리가 어떻게 사용되나요?

이미지 처리 작업에서 Wasserstein 거리가 어떻게 사용되나요?

WBOY
WBOY앞으로
2024-01-23 10:39:06688검색

이미지 처리 작업에서 Wasserstein 거리가 어떻게 사용되나요?

EMD(Earth Mover's Distance)라고도 알려진 Wasserstein 거리는 두 확률 분포 간의 차이를 측정하는 데 사용되는 측정 방법입니다. 전통적인 KL 분기 또는 JS 분기와 비교하여 Wasserstein 거리는 분포 간의 구조적 정보를 고려하므로 많은 이미지 처리 작업에서 더 나은 성능을 나타냅니다. 두 배포판 간의 최소 운송 비용을 계산함으로써 Wasserstein 거리는 한 배포판을 다른 배포판으로 변환하는 데 필요한 최소 작업량을 측정할 수 있습니다. 이 측정항목은 분포 간의 기하학적 차이를 포착할 수 있으므로 이미지 생성 및 스타일 전송과 같은 작업에서 중요한 역할을 합니다. 따라서 Wasserstein 거리는 확률 분포 비교 및 ​​이미지 처리 분야에서 널리 사용되는 도구 중 하나가 되었습니다.

Wasserstein 거리는 이미지 처리에서 두 이미지 간의 차이를 측정하는 데 사용됩니다. 유클리드 거리 및 코사인 유사성과 같은 전통적인 방법과 비교하여 이미지의 구조적 정보를 더 잘 고려할 수 있습니다. 이미지 검색에서는 일반적으로 쿼리 이미지와 가장 유사한 이미지를 찾으려고 합니다. 기존 방법은 특징 벡터를 사용하여 이미지를 표현하고 유클리드 거리 또는 코사인 유사성과 같은 측정값을 사용하여 이미지를 비교합니다. 그러나 이러한 측정 방법은 이미지 간의 공간적 관계를 무시하므로 이미지 변형이나 노이즈와 같은 상황에서는 적합하지 않을 수 있습니다. 대조적으로, Wasserstein 거리는 픽셀 간의 공간적 관계를 고려할 수 있으므로 이미지 간의 유사성을 더 잘 포착할 수 있습니다.

아래는 Wasserstein 거리를 이용한 이미지 검색의 예입니다.

1000개의 이미지로 구성된 데이터베이스가 있고 쿼리 이미지와 가장 유사한 이미지를 찾고 싶다고 가정해 보겠습니다. 각 이미지 쌍 간의 차이를 측정하기 위해 Wasserstein 거리를 사용하고 거리가 가장 작은 이미지를 쿼리 결과로 선택할 수 있습니다.

먼저, 히스토그램을 사용하여 각 픽셀의 회색도 분포를 나타내고, 회색도 값을 여러 개의 개별 간격으로 나누고, 각 간격의 픽셀 수를 계산할 수 있습니다. 이런 식으로 이미지를 나타내는 확률 분포를 얻을 수 있습니다.

각 픽셀의 회색조 분포를 표현하기 위해 10개의 회색조 간격을 사용한다고 가정하면 Python과 NumPy 라이브러리를 사용하여 각 이미지의 히스토그램 표현을 계산할 수 있습니다.

import numpy as np
import cv2

# Load query image
query_image = cv2.imread('query_image.png', cv2.IMREAD_GRAYSCALE)

# Compute histogram
hist, _ = np.histogram(query_image, bins=10, range=(0, 255), density=True)

그런 다음 각 쌍을 계산할 수 있습니다. 이미지 사이의 Wasserstein 거리를 지정하고 거리가 가장 작은 이미지를 쿼리 결과로 선택합니다.

# Load image database
database = []
for i in range(1000):
    img = cv2.imread(f'image_{i}.png', cv2.IMREAD_GRAYSCALE)
    database.append(img)

# Compute Wasserstein distance between query image and each database image
distances = []
for img in database:
    hist2, _ = np.histogram(img, bins=10, range=(0, 255), density=True)
    distance = cv2.EMD(hist, hist2, cv2.DIST_L2)
    distances.append(distance)

# Find index of image with minimum distance
min_index = np.argmin(distances)

이 예에서는 OpenCV 라이브러리의 cv2.EMD 함수를 사용하여 Wasserstein 거리를 계산합니다. 이 함수는 두 개의 확률 분포를 입력으로 사용하고 둘 사이의 거리를 반환합니다. cv2.DIST_L2 매개변수를 사용하여 유클리드 거리를 거리 측정법으로 사용하도록 지정합니다.

이미지 검색에 Wasserstein 거리를 사용하면 픽셀 간의 공간적 관계를 고려할 수 있어 이미지 간의 유사성을 더 잘 포착할 수 있다는 장점이 있습니다. 단점은 계산 복잡도가 높아 대규모 이미지 데이터베이스를 다룰 때 실용적이지 않을 수 있다는 것입니다.

요약하자면, Wasserstein 거리는 이미지 검색, 이미지 분류, 이미지 생성 등 이미지 처리의 다양한 작업에 사용할 수 있는 유용한 측정항목입니다.

위 내용은 이미지 처리 작업에서 Wasserstein 거리가 어떻게 사용되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 163.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제