2009-03-29 3 views

답변

25

일부 의사는 먼저 모든 긍정적하게 다른

oldmin=-500 
oldmax=1000 
oldrange=oldmax-oldmin; 

newmin=0 
newmax=255; 
newrange=newmax-newmin; 

foreach(oldvalue) 
{ 
    //where in the old scale is this value (0...1) 
    scale=(oldvalue-oldmin)/oldrange; 

    //place this scale in the new range 
    newvalue=(newrange*scale)+newmin 
} 
1

일부 의사 코드가 도움이 될 수

foreach(pixel_value in pixel_values): # between -500 and 1000 

    position = (pixel_value + 500)/1500 # gives you a 0 to 1 decimal 
    new_value = int(postion * 255) # or instead of casting, you could round it off 

그런데 파이썬 코드 있다고. 이 같은

+5

파이썬 코드가 아닙니다. –

+0

"픽셀 값은 pixel_values ​​:"이어야합니다. 많은 .NET 그날 ... – jsapara

3

한 범위에서 선형 값을 확장 할 것입니다. 최소값이 -500이면 모든 값에 500을 추가하십시오.

[value in 0,255] = 255*(Pixel/1500) 
6

귀하의 질문은 내가 갈거야 매우 ​​명확하지 않다 : 그럼 그 다음은 세 가지의 단지 규칙이고 당신이 가지고있는 최소 0 것, 최대 값은 1500

것 어떤 종류의 이미지 처리를하고 있다고 가정하면 결과는 -500에서 1000 사이의 값이며 이제 모든 값이 0에서 255 사이 여야하는 파일에 색상을 저장해야합니다.

이렇게하는 방법은 응용 프로그램에 실제로 매우 의존적입니다. 실제로 결과의 의미와 정확히 무엇을하고 싶습니까? 두 가지 주요 옵션은 다음과 같습니다

  • 클램프 값 - 이미지 처리는 어떤 경우 0에서 아무것도 당신이 당신은, 예를 들어,이 작업을 수행 할 수 있습니다 0과 255에 의해 대체 255 위의 아무것도에 의해 교체 이러한 값에 실제로 도달하지 않아야하는 보간법
  • 선형 정규화 - 선형 적으로 최소값을 0으로, 최대 값을 255로 지정할 수 있습니다. 물론 먼저 최소값과 최대 값을 찾아야합니다. 당신은 할 수 :

    v = (origv - min)/(max - min) * 255.0 
    

이 먼저 [0,1]에 값을 매핑하고 [0,255]에 다시 스트레칭입니다 무엇.

세 번째 옵션은이 두 옵션을 혼합하고 일치시키는 것입니다. 응용 프로그램에서는 음수 값을 불필요한 값으로 처리하고 0과 양수 값을 0으로 고정하여 선형으로 [0,255]에 매핑하도록 요구할 수 있습니다.

0

두 변수, MinInputValueMaxInputValue을 만듭니다. MinInputValue을 매우 큰 양수 (보고자하는 최대 픽셀 값보다 높음)와 MaxInputValue (매우 큰 음수)로 초기화하십시오 (보고자하는 가장 낮은 픽셀 값보다 낮습니다).

이미지의 모든 픽셀에 대해 반복합니다. 각 픽셀에 대해 PixelValue 픽셀 값이 MinInputValue보다 작 으면 MinInputValuePixelValue으로 설정하십시오. 픽셀 값이 MaxInputValue보다 큰 경우 MaxInputValuePixelValue으로 설정하십시오.

새 변수 InputValueRange을 만들고 MaxInputValue - MinInputValue으로 설정하십시오.

일단이 작업이 완료되면 이미지의 모든 픽셀을 다시 반복하십시오.각 픽셀 PixelValue에 대해 출력 픽셀 값을 255.0 * (PixelValue - MinInputValue)/InputValueRange으로 계산합니다. 이 새 값을 원본 PixelValue에 다시 할당하거나 같은 크기의 출력 이미지에서 해당 픽셀을 설정할 수 있습니다.