RGB를 1 차원 선형 색상 공간으로 변환하여 두 색상 사이의 거리를 계산합니다. 색상이 유사한 지 확인하고 두 색상의 차이를 계산합니다.

최근 문제를 해결하고 있는데, 두 개의 작은 그림의 유사도를 계산하고 싶습니다.
계산을 단순화하기 위해 rgb의 세 가지 색상의 분리 된 값을 하나의 값으로 결합 할 계획입니다. 두 색상이 비슷할수록, 두 값의 차이가 작을수록 예를 들어 색상 # 000001과 색상 # 000002의 차이가 1이면 값이 작을수록 두 색상이 가까워집니다. 현실은 당신이 예상하는 것만 큼 좋지 않습니다.

예를 들어, 색상
#ffffff는 흰색이고 색상 #feffff는 사람의 눈으로 거의 구별 할 수 없습니다. 동일하다고 간주 할 수 있으며 차이는 1이어야합니다. 그러나 두 수학적 차이는 # 010000
만큼 큽니다.
여기에 사진 설명 삽입

원래 알고리즘이나 관련 설명이나 공식이 있나요?

모든 종류의 정보를 확인한 후 가장 먼저 떠오르는 것은 색 공간 변환입니다. RGB를 선형 1 차원 색 공간으로 변환합니다.
검토 후 최종 결과는 매우 비극적이라는 것입니다. 전환 ...
그래서 큰 신 반 친구에게 물었습니다. 청어, 다음은 대화 내용입니다.

이름이 너무 어렵습니다.
여러분, 최근에 문제를 해결하고 있습니다. 두 개의 작은 그림의 유사성을 계산하고 싶습니다. 계산을 단순화하기 위해 세 가지 색상의 rgb를 분리 한 값을 다음과 같이 결합 할 계획입니다. 즉, 해당 rgb 원본 색상 값을 병합하고 계산합니다. 어떻게 계산할 수 있습니까? 원본 알고리즘이 있습니까? 또는 관련 설명 ... 또는 공식이 있습니까?

이름은 곤란하다 :
색의 색 공간이어야 연속 분포 0 ~ 255 255 ~ 255.

이름이 너무 어렵습니다.
여기에 사진 설명 삽입

인공 지능 동급생 bluishfish :
 단순한 병합은 많은 정보를 잃을 것입니다. 최상의 "알고리즘"은 완전히 독립적으로 쌓이는 것이 아닙니다. #FFFFFF 이런 종류의 표현은 데이터 무결성을 유지합니다

(저자의 메모, 여기에서는 위의 생각과 일치합니다. 문제를 풀다.)

이름은 어렵습니다 :
네, 현재 말씀하신 내용을 고려하고 있지만 이런 종류의 단순한 쌓기, 값 변경은 1 차원 연속이 아니라 3 차원입니다. 1 차원 연속 선형 공간을 찾고 싶습니다. 두 색상의 유사성을 명확하게 계산합니다. 두 색상이 가까울수록 차이가 작아집니다.

이름은 어렵습니다.
예를 들어 #FFFFFF와 #EFFFFF의 색상은 실제로 약간만 다르지만 값의 차이는 # 100000입니다.

인공 지능 동급생 청어 :
색 공간으로 전환

이름은 어렵습니다.
두 색상의 차이가 1 이길 바랍니다.

이름은 어렵습니다.
그런 색 공간이없는 것 같고 모두 입체적입니다.

이름이 너무 어렵습니다.
정보를 오랫동안 찾고있었습니다.

푸르스름한 물고기 :
HSV가 색상에 더 좋습니다.

bluishfish :
사람들에게 직관적

이름은 어렵습니다.
hsv는 여전히 3 성분, 3 차원 색 공간이므로 1 차원 색 공간으로 변환하고 싶습니다.

이름이 너무 어렵습니다. 3D
는 계산 하기 쉽지 않습니다.

이름이 너무 어렵습니다.
[영상]

bluishfish :
hsv는 색상 변화가 연속적임을 보장 할 수 있으며 3D에서 1D 로의 경우 비트 가중치 함수로 변환 할 수 있습니다.

이름은 어렵습니다.
비트 가중치를 적용하면 비슷한 색상의 가치도 비슷할 수 있습니까?

이름이 너무 어렵습니다.
작동하지 않는 것 같습니다.

이름은 어렵습니다.
기껏해야 하나의 색상과 비슷하며 다른 색상에 가깝다는 보장은 없습니다.

이름은 어렵습니다.
즉, 3 차원 공간이 1 차원 공간으로 압축되면 어떤 경우에도 인접한 3 개의 요소를 합치는 것은 불가능합니다.

bluishfish :
유사성 목표에 따라 다릅니다. 예를 들어 색조가 무거 우면 H 편차의 가중치를 높이면됩니다. 함께 압축 할 수없는 이유를 이해할 수 없습니다.

이름은 어렵습니다.
하나의 차원으로 압축하는 목표는 두 색상의 차이를 계산하는 것입니다.

이름이 너무 어렵습니다.
비슷한 색상 차이가 동일해야합니다.

이름이 너무 어렵습니다.
여기에 사진 설명 삽입

bluishfish :
H_bias a + S_bias b + V_bias * c는 충분하지 않습니다 a, b, c는 스스로 설정할 수 있습니다

이름은 어렵습니다.
예를 들어이 그림에서 색상 차이는 1입니다. 실제로 색상 차이가 1 인 비슷한 색상이 여러 개 있습니다.

이름은 너무 어렵습니다 :
3 차원 공간에서.

bluishfish :
RGB가 연속적이지 않습니다.

푸르스름한 물고기 :
이것을 예로 사용할 수 없습니다.

이름이 너무 어렵습니다 :
흠.

이름은 어렵습니다.
아마 알고있을 것입니다.

이름은 어렵습니다.
더 나은 방법을 생각했습니다 ... 마치 벡터 연산이 가능한 것처럼.

이름은 어렵습니다.
3 차원 공간에서의 거리 계산은 벡터로 계산해야합니다. 벡터 덧셈과 뺄셈의 원리를 따릅니다.

이름이 너무 어렵습니다.
MD, 영감의 섬광 ...

bluishfish :
벡터는 계산 도구 일 뿐이며 본질에도 가중치가 부여됩니다.

bluishfish :
L2 거리 또는 코사인

이름은 어렵습니다.
벡터 연산, 가장 큰 장점은 각 차원을 개별적으로 계산 한 다음 합계를 계산하여 거리를 계산할 수 있다는 것입니다.

푸르스름한 물고기 :
그러나 RGB는 좋지 않습니다. 연속적이지 않기 때문에 유사성을 나타낼 뿐이며 거리의 개념이 없습니다.

이름이 너무 어렵습니다.
벡터 공간에서는 괜찮습니다. 거리를 계산할 수 있습니다.

이름은 어렵습니다.
고급 수학은 정말 좋은 것입니다.

이름이 너무 어렵습니다 :
@bluishfish 감사합니다

그래서 여기에 전체 알고리즘에 대한 기본적인 생각이
있습니다. 대화를 보는 것만으로는 제가 생각하는 것을 이해하지 못할 수도 있습니다 ...

아래에서 조금만 말씀 드리겠습니다. 분명히 할 수 있기를 바랍니다.

RGB는 빨강, 초록, 파랑의 3 가지 색상에 해당하는데, 하나의 차원이 부족해서 색상을 표현할 수 없습니다 ...
그렇다면이 3 가지 정보를 어떻게 선에 투영 할 수 있을까요?

젠장, 말로는 가난 해 어떻게 설명해야할지 모르겠어

풋볼이 같은 크기의 조각으로 나뉘어 일정한 규칙에 따라 일렬로 배열되어 있다고 상상할 수 있습니다 ... (축구는 RGB를 나타내며이 선은 1 차원 배열 공간입니다.)
필요한 경우 되어야
이 라인에 배치 축구에 원래 있었던 인접하는 두 점은 같은 차이가있는 라인에 배치 된 후, 인접해야한다.

예를 들어
아래 그림과 같이 빨간색 5가 축구에서 가장 높은 지점을 나타내고 4와 6이 각각 꼭지점 옆에있는 2 개의 지점을 나타낸다고 가정하면
실제로 축구의 가장 높은 지점은 8입니다. (1)의 거리와 인접한 지점 아래 그림에 도시 된 바와 같이. 단순화를 제 2 차원 효과를보고.
2D에는 9 개의 인접 항목이 있습니다.
일차원 CAN 단지 2 인접 점을 넣어. 나머지 6 함께 라인에 배치 될 수 없다 1 갭 .
여기에 사진 설명 삽입
한 차원 공간에 인접한 두 개의 포인트가 있습니다. 당신은 나머지 6 순위를 어떻게 아니 그들은 더이 두보다, 문제.

따라서이 경로는 작동하지 않으며 거리를 잃지 않고 3D 정보를 1D로 압축하는 것은 불가능합니다.

갑자기 영감이 떠 올랐고 벡터라는 또 다른 종류의 수학이 있습니다. 여기에서 사용할 수도 있습니다.
벡터는 거리를 계산할 수 있습니다. 어떻게 계산합니까? Baidu가 벡터를 살펴 봤습니다. (사실 Baidu였습니다. 채팅 중)

여기에 사진 설명 삽입
문제로 변환하면
픽셀 포인트 a = (Ra, Ga, Ba)
픽셀 포인트 b = (Rb, Gb, Bb)

두 픽셀 a와 b의 색상이 유사한 지 여부를 계산하는 계산 공식은 다음과 같습니다.

距离 = (Ra-Rb) + (Ga-Gb) + (Ba-Bb)

즉, 각 차원은 간격을 찾기 위해 별도로 계산되고, 빨간색은 빨간색, 녹색은 녹색, 파란색은 파란색을 뺀 다음 각 차원의 차이를 더합니다. 두 색상은 RGB 색상 공간에서 거리입니다.

이 글은 끝났습니다. 나중에이 로직에 따라 코드 작성을 시작할 수 있습니다.

추천

출처blog.csdn.net/phker/article/details/112987986