색 변환 매트릭스 창고
11030 단어 ImageProcessingMatrixcolor
색상 변환 매트릭스란 무엇입니까?
행렬과 RGB 값을 곱하여 계산하면 색상 변환이 가능합니다.그렇게 편한 팀은하나의 행렬이기 때문에 색 공간에 대해 선형 변환이라면 무엇이든 처리할 수 있습니다.
행렬의 형상은 여러 가지가 있는데 간단한 것은 다음과 같은 4x3 행렬이다.(밝기는 0.0~1.0 범위)\begin{pmatrix}
R' \\
G' \\
B'
\end{pmatrix}
=
\begin{pmatrix}
m_{11} & m_{21} & m_{31} & m_{41} \\
m_{12} & m_{22} & m_{32} & m_{42} \\
m_{13} & m_{23} & m_{33} & m_{43} \\
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B \\
1
\end{pmatrix}
R, G, B는 다음 방정식으로만 계산된다는 것이다.R' = m_{11} R + m_{21} G + m_{31} B + m_{41} \\
G' = m_{12} R + m_{22} G + m_{32} B + m_{42} \\
B' = m_{13} R + m_{23} G + m_{33} B + m_{43}
기하학적 변환을 연상하는 모방 행렬의 방정식은 실제 계산 자체가 같기 때문에 비슷한 요령에 따라 프로그래밍을 할 수 있다고 생각합니다.
행렬 크기
게다가 방진은 행렬로서 더욱 편리하기 때문에 아래의 표현을 많이 사용한다.방금 4x3 행렬은 이 생략 형식입니다.\begin{pmatrix}
R' \\
G' \\
B' \\
1
\end{pmatrix}
=
\begin{pmatrix}
m_{11} & m_{21} & m_{31} & m_{41} \\
m_{12} & m_{22} & m_{32} & m_{42} \\
m_{13} & m_{23} & m_{33} & m_{43} \\
0 & 0 & 0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B \\
1
\end{pmatrix}
RGBA면 5x5로 추가됩니다.A(alpha)까지 함께 처리한 일은 많지 않지만, 일단 소개부터 하자.\begin{pmatrix}
R' \\
G' \\
B' \\
A' \\
1
\end{pmatrix}
=
\begin{pmatrix}
m_{11} & m_{21} & m_{31} & m_{41} & m_{51} \\
m_{12} & m_{22} & m_{32} & m_{41} & m_{52} \\
m_{13} & m_{23} & m_{33} & m_{43} & m_{53} \\
m_{14} & m_{24} & m_{34} & m_{44} & m_{54} \\
0 & 0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B \\
A \\
1
\end{pmatrix}
색 변환 매트릭스의 장점
\begin{pmatrix}
R' \\
G' \\
B'
\end{pmatrix}
=
\begin{pmatrix}
m_{11} & m_{21} & m_{31} & m_{41} \\
m_{12} & m_{22} & m_{32} & m_{42} \\
m_{13} & m_{23} & m_{33} & m_{43} \\
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B \\
1
\end{pmatrix}
R' = m_{11} R + m_{21} G + m_{31} B + m_{41} \\
G' = m_{12} R + m_{22} G + m_{32} B + m_{42} \\
B' = m_{13} R + m_{23} G + m_{33} B + m_{43}
게다가 방진은 행렬로서 더욱 편리하기 때문에 아래의 표현을 많이 사용한다.방금 4x3 행렬은 이 생략 형식입니다.
\begin{pmatrix}
R' \\
G' \\
B' \\
1
\end{pmatrix}
=
\begin{pmatrix}
m_{11} & m_{21} & m_{31} & m_{41} \\
m_{12} & m_{22} & m_{32} & m_{42} \\
m_{13} & m_{23} & m_{33} & m_{43} \\
0 & 0 & 0 & 1 \\
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B \\
1
\end{pmatrix}
RGBA면 5x5로 추가됩니다.A(alpha)까지 함께 처리한 일은 많지 않지만, 일단 소개부터 하자.\begin{pmatrix}
R' \\
G' \\
B' \\
A' \\
1
\end{pmatrix}
=
\begin{pmatrix}
m_{11} & m_{21} & m_{31} & m_{41} & m_{51} \\
m_{12} & m_{22} & m_{32} & m_{41} & m_{52} \\
m_{13} & m_{23} & m_{33} & m_{43} & m_{53} \\
m_{14} & m_{24} & m_{34} & m_{44} & m_{54} \\
0 & 0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B \\
A \\
1
\end{pmatrix}
색 변환 매트릭스의 장점
선형변환의 구체적인 예를 보지 않으면 장점을 이해하기 어려우므로 구체적인 예부터 소개한다.
구체적 예
무변화
우선 R, G, B 값이 변하지 않는 행렬을 기본 형식으로 소개한다.\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{pmatrix}
실제 계산하면 다음과 같이 되기 때문에 변화가 없을 것이 분명하다.R' = 1 R + 0 G + 0 B + 0 = R \\
G' = 0 R + 1 G + 0 B + 0 = G \\
B' = 0 R + 0 G + 1 B + 0 = B
또한 단위 행렬(identity matrix)의 형상은 다음과 같다.\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
특정 색상 강조
이것은 덧셈과 곱셈을 통해 빨간색을 증가시킨 예다.
적색 덧셈
\begin{pmatrix}
1 & 0 & 0 & 0.4 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{pmatrix}
\\
R' = 1 R + 0 G + 0 B + 0.4 = R + 0.4 \\
G' = 0 R + 1 G + 0 B + 0 = G \\
B' = 0 R + 0 G + 1 B + 0 = B
원본 이미지
R + 0.4
빨간색을 0.4 높여라.부피가 커서 모두 빨개졌다.
적색 곱셈
\begin{pmatrix}
1.4 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{pmatrix}
\\
R' = 1.4 R + 0 G + 0 B + 0 = 1.4 R \\
G' = 0 R + 1 G + 0 B + 0 = G \\
B' = 0 R + 0 G + 1 B + 0 = B
원본 이미지
R x 1.4
빨간색만 1.4배.이쪽의 검은색은 아직 검은색이 남아 있어서 자연히 빨간색을 띠게 될 것이다.추천합니다.
명암비 향상
\begin{pmatrix}
1.5 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0
\end{pmatrix}
\\
R' = 1.5 R + 0 G + 0 B + 0 = 1.5 R \\
G' = 0 R + 1.5 G + 0 B + 0 = 1.5 G \\
B' = 0 R + 0 G + 1.5 B + 0 = 1.5 B
원본 이미지
RGB x 1.5
밝기가 1.5배 증가한다.어두운 이미지의 가시성을 대폭 높이다.
그레이스케일링
\begin{pmatrix}
0.2126 & 0.7152 & 0.0722 & 0 \\
0.2126 & 0.7152 & 0.0722 & 0 \\
0.2126 & 0.7152 & 0.0722 & 0
\end{pmatrix}
\\
R' = 0.2126 R + 0.7152 G + 0.0722 B \\
G' = 0.2126 R + 0.7152 G + 0.0722 B \\
B' = 0.2126 R + 0.7152 G + 0.0722 B \\
원본 이미지
grayscale
R, G, B 세 값은 모두 같습니다.가중 평균 계수 {0.226,0.7152,0.0722} BT.709 참조.아마도 BT.601은 비교적 유명할 것이다.
R, G, B 교체
\begin{pmatrix}
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 \\
1 & 0 & 0 & 0
\end{pmatrix}
\\
R' = 0 R + 0 G + 1 B + 0 = B \\
G' = 0 R + 1 G + 0 B + 0 = G \\
B' = 1 R + 0 G + 0 B + 0 = R
원본 이미지
BGR
R(빨간색) 및 B(파란색)를 대체합니다.OpenCV에서 실수로 자주 오류가 발생할 때 표시되는 이미지입니다.
플러스 마이너스 반전
\begin{pmatrix}
-1 & 0 & 0 & 1 \\
0 & -1 & 0 & 1 \\
0 & 0 & -1 & 1
\end{pmatrix}
\\
R' = -1 R + 0 G + 0 B + 1 = 1 - R \\
G' = 0 R - 1 G + 0 B + 1 = 1 - G \\
B' = 0 R + 0 G - 1 B + 1 = 1 - B
원본 이미지
negate
밝기를 반전하다.이것은 그림 처리에서 보기 드문 실수로 오류가 발생했을 때 보이는 그림입니다.소화시대의 여러분이라면, 아마도 아날로그 카메라의 필름으로 보기에 익숙한 이미지일 것이다.
색 변환 매트릭스의 장점
숫자의 나열로 변환을 표시할 수 있다
4x3 행렬의 12개의 수치만으로도 각종 이미지 변환을 나타낼 수 있다.
예를 들어 빨간색 강조(1.4R)는 {1.4, 0, 0, 0, 1, 0, 0, 0, 1, 0이 될 수 있다.
프로그래밍에 편리한 점이 많다.
선형 변환이라면 무엇이든지 다 된다
역으로 말하면 선형 전환만 할 수 있다.(정확히 의선형이다. 가산이 증가하면 원점이 편이되어 선형이라고 할 수 없다.)
어떤 전환을 할 수 있는지, 어떤 전환을 할 수 있는지는 불가능하다. 간단하고 쉽게 알 수 있는 것은 프로그램 설계뿐만 아니라 서비스 방법을 고려하는 데도 좋은 점이 많다.
예를 들어 감마 교정과 같은 비선형 처리는 안 되고 max/min을 포함하는 조작도 불가능하니 필요하면 따로 제작하세요.
통일적으로 처리할 수 있다.
행렬의 곱셈이기 때문에 여러 변환 행렬을 적용하려면 곱셈으로 한 행렬로 합치면 여러 변환을 동시에 할 수 있다.
예를 들어 대비도가 높아진 상태에서 빨간색을 강조한 상태에서 순서대로 처리하려면\begin{pmatrix}
R' \\
G' \\
B'
\end{pmatrix}
=
\begin{pmatrix}
1.5 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B
\end{pmatrix}
\begin{pmatrix}
R'' \\
G'' \\
B''
\end{pmatrix}
=
\begin{pmatrix}
1.4 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{pmatrix}
\begin{pmatrix}
R' \\
G' \\
B'
\end{pmatrix}
이렇게 하면 아래의 그림을 만들 수 있다.
원본 이미지(RGB)
RGB x 1.5 (R'G'B')
R x 1.4 (R''G''B'')
이 의식은 총괄적으로 보면 이렇다.\begin{pmatrix}
R'' \\
G'' \\
B''
\end{pmatrix}
=
\begin{pmatrix}
1.4 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{pmatrix}
\begin{pmatrix}
1.5 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B
\end{pmatrix}
이 설정을 사각형 행렬로 설정하면 다음과 같습니다.\begin{pmatrix}
R'' \\
G'' \\
B'' \\
1
\end{pmatrix}
=
\begin{pmatrix}
1.4 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
1.5 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B \\
1
\end{pmatrix}
사이의 두 색 행렬은 곱셈으로 그것을 하나로 합칠 수 있다.\begin{pmatrix}
1.4 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
1.5 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0\\
0 & 0 & 0 & 1
\end{pmatrix}
=
\begin{pmatrix}
2.1 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
한 번에 여러 개의 변환을 해도 결과는 같은 이미지를 얻을 수 있습니다.\begin{pmatrix}
R'' \\
G'' \\
B''
\end{pmatrix}
=
\begin{pmatrix}
2.1 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B
\end{pmatrix}
이 예는 두 가지가 있는데 설령 이것이 3, 4개, 심지어 100개로 증가하더라도 한 번의 처리로 요약할 수 있다.
또한 각각 처리하면 각 처리에서 소수점을 제거하거나 0255에서clamp를 제거하여 중도 이미지 악화의 좋지 않은 영향을 피할 수 있다.
최후
아래의 URL로 대체적으로 시도할 수 있기 때문에 대표적인 선형 변환을 시도해 보십시오.
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{pmatrix}
R' = 1 R + 0 G + 0 B + 0 = R \\
G' = 0 R + 1 G + 0 B + 0 = G \\
B' = 0 R + 0 G + 1 B + 0 = B
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
1 & 0 & 0 & 0.4 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{pmatrix}
\\
R' = 1 R + 0 G + 0 B + 0.4 = R + 0.4 \\
G' = 0 R + 1 G + 0 B + 0 = G \\
B' = 0 R + 0 G + 1 B + 0 = B
\begin{pmatrix}
1.4 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{pmatrix}
\\
R' = 1.4 R + 0 G + 0 B + 0 = 1.4 R \\
G' = 0 R + 1 G + 0 B + 0 = G \\
B' = 0 R + 0 G + 1 B + 0 = B
\begin{pmatrix}
1.5 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0
\end{pmatrix}
\\
R' = 1.5 R + 0 G + 0 B + 0 = 1.5 R \\
G' = 0 R + 1.5 G + 0 B + 0 = 1.5 G \\
B' = 0 R + 0 G + 1.5 B + 0 = 1.5 B
\begin{pmatrix}
0.2126 & 0.7152 & 0.0722 & 0 \\
0.2126 & 0.7152 & 0.0722 & 0 \\
0.2126 & 0.7152 & 0.0722 & 0
\end{pmatrix}
\\
R' = 0.2126 R + 0.7152 G + 0.0722 B \\
G' = 0.2126 R + 0.7152 G + 0.0722 B \\
B' = 0.2126 R + 0.7152 G + 0.0722 B \\
\begin{pmatrix}
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 \\
1 & 0 & 0 & 0
\end{pmatrix}
\\
R' = 0 R + 0 G + 1 B + 0 = B \\
G' = 0 R + 1 G + 0 B + 0 = G \\
B' = 1 R + 0 G + 0 B + 0 = R
\begin{pmatrix}
-1 & 0 & 0 & 1 \\
0 & -1 & 0 & 1 \\
0 & 0 & -1 & 1
\end{pmatrix}
\\
R' = -1 R + 0 G + 0 B + 1 = 1 - R \\
G' = 0 R - 1 G + 0 B + 1 = 1 - G \\
B' = 0 R + 0 G - 1 B + 1 = 1 - B
숫자의 나열로 변환을 표시할 수 있다
4x3 행렬의 12개의 수치만으로도 각종 이미지 변환을 나타낼 수 있다.
예를 들어 빨간색 강조(1.4R)는 {1.4, 0, 0, 0, 1, 0, 0, 0, 1, 0이 될 수 있다.
프로그래밍에 편리한 점이 많다.
선형 변환이라면 무엇이든지 다 된다
역으로 말하면 선형 전환만 할 수 있다.(정확히 의선형이다. 가산이 증가하면 원점이 편이되어 선형이라고 할 수 없다.)
어떤 전환을 할 수 있는지, 어떤 전환을 할 수 있는지는 불가능하다. 간단하고 쉽게 알 수 있는 것은 프로그램 설계뿐만 아니라 서비스 방법을 고려하는 데도 좋은 점이 많다.
예를 들어 감마 교정과 같은 비선형 처리는 안 되고 max/min을 포함하는 조작도 불가능하니 필요하면 따로 제작하세요.
통일적으로 처리할 수 있다.
행렬의 곱셈이기 때문에 여러 변환 행렬을 적용하려면 곱셈으로 한 행렬로 합치면 여러 변환을 동시에 할 수 있다.
예를 들어 대비도가 높아진 상태에서 빨간색을 강조한 상태에서 순서대로 처리하려면
\begin{pmatrix}
R' \\
G' \\
B'
\end{pmatrix}
=
\begin{pmatrix}
1.5 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B
\end{pmatrix}
\begin{pmatrix}
R'' \\
G'' \\
B''
\end{pmatrix}
=
\begin{pmatrix}
1.4 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{pmatrix}
\begin{pmatrix}
R' \\
G' \\
B'
\end{pmatrix}
이렇게 하면 아래의 그림을 만들 수 있다.원본 이미지(RGB)
RGB x 1.5 (R'G'B')
R x 1.4 (R''G''B'')
이 의식은 총괄적으로 보면 이렇다.
\begin{pmatrix}
R'' \\
G'' \\
B''
\end{pmatrix}
=
\begin{pmatrix}
1.4 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{pmatrix}
\begin{pmatrix}
1.5 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B
\end{pmatrix}
이 설정을 사각형 행렬로 설정하면 다음과 같습니다.\begin{pmatrix}
R'' \\
G'' \\
B'' \\
1
\end{pmatrix}
=
\begin{pmatrix}
1.4 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
1.5 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B \\
1
\end{pmatrix}
사이의 두 색 행렬은 곱셈으로 그것을 하나로 합칠 수 있다.\begin{pmatrix}
1.4 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
1.5 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0\\
0 & 0 & 0 & 1
\end{pmatrix}
=
\begin{pmatrix}
2.1 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
한 번에 여러 개의 변환을 해도 결과는 같은 이미지를 얻을 수 있습니다.\begin{pmatrix}
R'' \\
G'' \\
B''
\end{pmatrix}
=
\begin{pmatrix}
2.1 & 0 & 0 & 0 \\
0 & 1.5 & 0 & 0 \\
0 & 0 & 1.5 & 0
\end{pmatrix}
\begin{pmatrix}
R \\
G \\
B
\end{pmatrix}
이 예는 두 가지가 있는데 설령 이것이 3, 4개, 심지어 100개로 증가하더라도 한 번의 처리로 요약할 수 있다.또한 각각 처리하면 각 처리에서 소수점을 제거하거나 0255에서clamp를 제거하여 중도 이미지 악화의 좋지 않은 영향을 피할 수 있다.
최후
아래의 URL로 대체적으로 시도할 수 있기 때문에 대표적인 선형 변환을 시도해 보십시오.
Reference
이 문제에 관하여(색 변환 매트릭스 창고), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoya/items/95bfb8659f37ea8a2800텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)