>

내 내부 루프에는 프로파일 링에 문제가있는 것으로 계산 된 내용이 포함되어 있습니다.

그레이 스케일 픽셀 x (0<= x<= 1)를 가져 와서 "대비도를 높이는"아이디어가 있습니다. 다음과 같은 요구 사항이 상당히 느슨합니다.

  • x<.5, 0<= f (x)
  • x>.5, x
  • f (0) = 0
  • f (x) = 1-f (1-x), 즉 "대칭"이어야합니다
  • 바람직하게는 기능이 원활해야합니다.

그래프는 다음과 같아야합니다 :

.

두 가지 구현이 있습니다 (결과는 다르지만 둘 다 일치합니다) :

float cosContrastize(float i) {
    return .5 - cos(x * pi) / 2;
}
float mulContrastize(float i) {
    if (i < .5) return i * i * 2;
    i = 1 - i;
    return 1 - i * i * 2;
}

이러한 구현 중 하나에 대한 미세 최적화 또는 독자적인보다 빠른 독창적 인 공식을 요청합니다.

어쩌면 여러분 중 한 명이 비트를 돌리기도합니다.)


  • 답변 # 1

    당연히 당신은 단순히 임계 값을 내릴 수는 있지만 이것이 너무 멍청하다고 생각합니다.

    return i < 0.5 ? 0.0 : 1.0;
    
    

    '증가 대비'를 언급 한 이후 입력 값이 휘도 값이라고 가정합니다. 그렇다면 불 연속적이며 (아마 8 비트 값일 수 있음) 조회 테이블을 사용하여이 작업을 매우 빠르게 수행 할 수 있습니다.

    'mulContrastize'는 상당히 빠르다. 하나의 최적화는 정수 수학을 사용하는 것입니다. 다시 말해, 입력 값은 실제로 [0..255]에서 8 비트 부호없는 값으로 전달 될 수 있습니다. (또 좋은 가정일까요?) 대략 다음과 같은 일을 할 수 있습니다 ...

    int mulContrastize(int i) {
      if (i < 128) return (i * i) >> 7; 
      // The shift is really: * 2 / 256
      i = 255 - i;
      return 255 - ((i * i) >> 7);
    
    

  • 답변 # 2

    다음시그 모이 드모양의 기능 (원하는 범위로 올바르게 번역됨)을 고려하십시오.

    오류 기능

    일반 CDF

    로깅


    MATLAB을 사용하여 위 그림을 생성했습니다. 관심이 있다면 여기 코드가 있습니다 :

    x = -3:.01:3;
    plot(   x, 2*(x>=0)-1, ...
            x, erf(x), ...
            x, tanh(x), ...
            x, 2*normcdf(x)-1, ...
            x, 2*(1 ./ (1 + exp(-x)))-1, ...
            x, 2*((x-min(x))./range(x))-1  )
    legend({'hard' 'erf' 'tanh' 'normcdf' 'logit' 'linear'})
    
    

  • 답변 # 3

    개별 보간은 빠르고 유연 할 수 있습니다. 곱셈과 덧셈이 뒤 따르는 몇 가지 결정 만 필요하며 모든 곡선에 근접 할 수 있습니다. 또한 조회 테이블에 의해 도입 될 수있는 진로를 피할 수 있습니다 (또는이 조회를 부드럽게하기 위해 보간이 뒤 따르는 두 조회의 추가 비용). 그러나 lut는 귀하의 경우에 완벽하게 작동 할 수 있습니다.

    몇 개의 세그먼트 만 있으면 꽤 잘 어울릴 수 있습니다. 여기에는 색상그라데이션의 코스가 있으며, 절대 색상의 코스보다 감지하기가 훨씬 어렵습니다.

    Eamon Nerbonne이 의견에서 지적했듯이 "세분화를 극대화하기 위해 2 차 도함수와 같은 것을 기반으로 세분화 지점을 선택하여"즉, 경사가 가장 많이 변하는 방식으로 세분화를 최적화 할 수 있습니다. 분명히, 내가 게시 한 예에서, 5 개의 세그먼트 케이스 중간에 3 개의 세그먼트가 있다고해서 더 많은 세부 사항이 추가되지는 않습니다.

  • 이전 java - 날짜 시간 선택기 제어
  • 다음 pointers - c ++ - 두 점의 값을 동일하게하려고하면 오류가 발생했습니다 표현식은 산술 또는 열거 형이어야합니다