2012-01-13 5 views
3

그레이 스케일 이미지에 5 가지 색상의 그래디언트 값을 그려야합니다. 밝은 픽셀은 그라디언트에서 밝은 색을 가져야하며 어두운 픽셀은 어두운 픽셀을 가져야합니다.그레이 스케일 이미지 색상 화

그라디언트가 노란색으로 시작하여 빨간색으로 끝나면 흰색 픽셀은 노란색이되고 검은 색 픽셀은 그라디언트를 따라 가운데에 모두 빨간색으로 표시됩니다.

ColorMatrix로 처리 할 수 ​​있습니까?

답변

2

은 당신이 원하는 것은 간단한 경우에 3 차원에서 5 점 사이에 선형 보간이다. {r1, g1, b1}과 {r2, g2, b2} 점을 연결하는 3 차원 선 위로 걸어 가면서 두 색상 {r1, g1, b1}과 {r2, g2, b2} b2}. 회색 값이 [0,1] 간격에있을 때 회색 레벨이 0이고 {r2, g2, b2}이면 색상 {r1, g1, b1}을 원할 것입니다. 그레이 레벨 1.문제는 그 사이의 색상을 계산하는 방법입니다.

간단한 학교 벡터 분석을 생각해보십시오. c1은 점 {r1, g1, b1}이고, c2는 {r2, g2, b2}입니다.

또는 동일

outColor = (1-회색) C1 + 회색

outColor = C1 + 회색 * (C2-C1) C1에서 시작 벡터 C2-(C1)의 방향으로 이동 c2

Remenber, 회색은 [0,1] 간격에 있어야합니다. 그렇지 않으면 재조정해야합니다. 이것은 두 점 사이의 단순 선형 보간입니다. 물론 원하는만큼 많은 색상을 확장 할 수 있습니다.

5 가지 색상에 대한 접근 방식은 기본적으로 동일합니다. 여기에 5 개 무작위로 선택된 색상 : 먼저,

  1. 을 주어진 회색 값의 색상을 원한다면 :

    {{0.273372, 0.112407, 0.0415183}, 
    {0.79436, 0.696305, 0.167884}, 
    {0.235083, 0.999163, 0.848291}, 
    {0.295492, 0.780062, 0.246481}, 
    {0.584883, 0.460118, 0.940826}} 
    

    enter image description here

    두 가지 중요한 것을 당신은 알고있다 2 개의 주변 rgb- 포인트를 추출해야합니다. 예를 들어 회색 = 0.1의 색을 원하면 첫 번째 및 두 번째 RGB 점이됩니다.

  2. 은 그라디언트에서 사용하는 색상 수에 따라 회색 값을 조정해야합니다. 이미지를 보시려면 5 가지 색상을 사용하십시오. 두 가지 보간 간격이 인 4 가지 이 있습니다. 위에서 언급 한 색상 공식을 사용하려면 각 색상 간격의 회색 값을 [0,1]로 재조정해야합니다.

비고 :이 물론 C#에서 구현을위한 해결책 아닙니다,하지만 귀하의 질문에 같은 크기의 컬러 이미지를 만드는 것은 문제 아니라는 것을 제안. 각 회색 값의 색상 값 계산은 색상 지정의 핵심입니다.

+0

완벽! 멋진 그래프! –

0

그레이 스케일 이미지의 모든 픽셀을 반복하고 간단하게 LINQ를 사용하여 가장 간단하게 밝기 및 알파 값을 취할 수 있습니다. 그런 다음 원하는 색상을 취하고 색조 및 채도 및 밝기를 사용합니다.

이제 Gray.Alpha, Color.Hue, Color.Saturation 및 Gray.Brightness와 Color.Brightness의 조합을 가져 와서이 색상을 그레이 스케일 이미지의 픽셀에 적용하여 새 색상을 만듭니다.

첫 번째 까다로운 부분은 알파, 색조, 채도 및 윤곽선으로 색상을 만드는 것이지만, 간단히 this function ;-)을 사용할 수 있습니다.

마지막 까다로운 부분은 회색의 밝기와 색상을 결합하여 독자에게 운동으로 남겨 둡니다. ;-)

+0

대단히 감사합니다! –

+0

밝기는 HSL 색상에서 사용되는 광도와 동일하지 않습니다. – Nyerguds

2

당신은 "5 가지 색상"은 물론 빨간색에서 노란색까지 그라디언트를 언급했습니다.

기본 개념을 설명하기 위해 바이트 배열에서 Color 배열을 생성 할 수 있습니다. 여기서 바이트 배열은 원본 이미지의 8 비트 회색조 값을 나타냅니다.

  • Color.FromArgb이다 (255,0,0)
  • 계조 값이 255 (백색) Color.FromArgb 황 매핑 계조 값이 0 (검은 색) 적색에 매핑 (255,255,0)

새로운 그라데이션 색을 찾기 위해 (R, G, B는) (8 비트) 계조 값을 주어, 다음을 수행

  1. 설정 적색 성분 집합
  2. 255 블루 c - 원래의 회색 값 creationComplete 컴퍼넌트 (0 ~ 255)
  3. 색상 배열에 바이트 배열로 변환 0

샘플 코드로 녹색 구성 요소를 설정하는 것은 :

byte[] bytes = getImageBytes(); 
Color[] colors = new Color[bytes.Length]; 

for(int i = 0; i < bytes.Length; i++) 
{ 
    colors[i] = Color.FromArgb(255, bytes[i], 0); 
} 

신속하게이 작업을 수행하려면 , "잠금/잠금 해제 비트"코드를 사용하고 직접 바이트 값을 조작하십시오.

http://msdn.microsoft.com/en-us/library/5ey6h79d.aspx

+1

감사합니다. 그것을 줄 것이다 –

관련 문제