OpenCV 난수 생 성

4644 단어
OpenCV 난수 생 성
개념
    1. 일반 컴퓨터 의 랜 덤 수 는 모두 가짜 랜 덤 수 이 고 하나의 진짜 랜 덤 수 (피 드) 를 초기 조건 으로 한 다음 에 일정한 알고리즘 으로 랜 덤 수 서열 을 교체 한다.
    2. 난수 의 '피 드' 는 난수 가 발생 하 는 첫 번 째 사용 값 이다. 체 제 는 비교적 복잡 한 함 수 를 통 해 이 피 드 의 값 을 난수 공간의 특정한 점 에 투사 하고 발생 하 는 난수 가 균일 하 게 (또는 정상 분포 에 부합 되 는 등) 공간 을 산책 하 며 앞으로 발생 하 는 난수 가 모두 앞의 난수 와 관련된다.
    3.RNG : random number generation   난수 생 성
(저작권 성명): 네트워크 참조
2. opencv 의 함수
1.CvRNG cvRNG(int64 seed);
   64 비트 길이 성형 피 드 를 사용 하여 난수 생 성기 상 태 를 초기 화 합 니 다.
   cvGetTickCount();
   64 비트 의 긴 성형 시간 데 이 터 를 되 돌려 줍 니 다. opencv 에 서 는 CvRNG 를 위 한 전용 피 드 입 니 다.
2.unsigned cvRandInt(CvRNG* rng);
   고 르 게 분 포 된 무 작위 32 비트 부호 없 는 정형 값 을 되 돌려 주 고 RNG 의 상 태 를 업데이트 합 니 다.모드 작업 을 사용 하면 경 계 를 확인 하 는 성형 수 치 를 얻 을 수 있 습 니 다.
3.double cvRandReal(CvRNG* rng);
   균일 하 게 분 포 된 즉시 부동 소수점 을 되 돌려 주 고 범 위 는 0 - 1 (1 포함 하지 않 음) 이 며 RNG 상 태 를 업데이트 합 니 다.
4. voidcvRandArr( CvRNG* rng, CvArr* arr, int dist_type, CvScalar param1,CvScalar param2 );
   난수 로 배열 을 채 우 고 RNG 상 태 를 업데이트 합 니 다.
   arr 출력 배열
   dist_type 분포 유형:  CV_RAND_UNI - 균일 분포 ; CV_RAND_NORMAL - 정상 분포 또는 가우스 분포
   param1 분포 의 첫 번 째 매개 변수.균등 하 게 분포 한다 면 그것 은 난수 범위 의 폐 하 경계 이다.정상 분포 라면 난수 의 평균 값 이다.
   param2 분포 의 두 번 째 매개 변수.균등 하 게 분포 한다 면 그것 은 난수 범위 의 상경 계 이다.정상 분포 라면 난수 의 표준 차 입 니 다.
예 를 하나 보 겠 습 니 다.
#include"cv.h"

#include"highgui.h"

#include<stdio.h>

intmain()

{

CvRNGrng=cvRNG(0);

inti=0;

for(i=0;i<5;i++)

printf("%d,",cvRandInt(&rng));

printf("
"); for(i=0;i<5;i++) printf("%f,",cvRandReal(&rng)); printf("
"); }

cvGetTickCount () 는 64 비트 의 긴 정수 시간 데 이 터 를 되 돌려 줍 니 다. OpenCV 에 서 는 CvRNG 를 위 한 전용 피 드 입 니 다.
cvGetTickFrequency()
복귀 시스템 클 럭 주파수
cvRNG()
일반적인 C 언어 srand () 사용 방법 과 마찬가지 로 피 드 를 먼저 주어 야 하지만 srand () 는 unsignedint 의 32 비트 피 드 범 위 를 사용 하고 cvRNG () 는 64 비트 길이 의 정수 피 드 를 사용한다.CvRNG 자료 구 조 를 초기 화 합 니 다. seed 가 0 을 주면 자동 으로 - 1 로 전 환 됩 니 다.cvRNG (64 비트 피 드)
cvRandInt()
고 르 게 분 포 된 32 비트 의 임 의 수 를 되 돌려 통계학 적 전문 명사 로 고 르 게 분포 하 는 것 은 장시간 동안 모든 숫자 가 나타 날 확률 이 같다 는 것 을 나타 내 고 cvRandint () 는 opencv 에서 사용 하 는 공식 이다.
temp= (uint64)(unsigned)temp*1554115554 + (temp >> 32);
이 공식 이름 은 Multiply - with - carry (MWC) generator 로 관심 이 있 으 면 인터넷 에서 '랜 덤 수 생 성기' 를 찾 을 수 있 으 며, Multiply - with - carry 는 64 비트 의 씨앗 을 32 비트 의 랜 덤 수 를 만 드 는 것 이다.unsignedcvRandInt (CvRNG 자료 구조)
cvRandReal()
고 르 게 분포 되 어 있 는 0 ~ 1 사이 의 무 작위 소 수 를 되 돌려 주 고 cvRandReal () 의 공식 은 cvRandInt (rng) * 2.32836436538662890625e - 10 의 방법 으로 cvRandInt (rng) * 2 ^ (- 32), 즉 cvRandInt () 를 무 작위 로 나 눈 결과 (32 위 를 2 의 32 제곱 으로 나 누 기 때문에 나타 나 는 결 과 는 0 ~ 1 사이 의 소수, 즉 무 작위 0 ~ 1 사이 가 될 것 이다.
3. 고정 분포 의 난수 생 성
voidcvRand( CvRandState* state, CvArr* arr );
무 작위 변 수 를 사용 하여 arr 를 채 웁 니 다. 내부 에서 호출 된 cvRandArr, cvRandArr 의 인 자 는 state 에서 제공 합 니 다.
그 중에서 CvRandState 는 무 작위 벡터 를 만 드 는 구조 배열 로 cvRandInit 에서 CvRandState 를 초기 화 합 니 다. 예 를 들 어:
cvRandInit(&rng_state,0, 1, 0xffffffff, CV_RAND_UNI)
초기 화 방법:
cvRandInit (CVRandState 자료 구조, 무 작위 상계, 무 작위 하계, 고 르 게 분 포 된 매개 변수, 분포 유형 지정 (CV RAND UNI)
cvRandInit (CVRandState 자료 구조, 평균 수, 표준 차, 정상 분포 변수, 정상 분포 유형 (CV RAND NORMAL))
예:
CvRandStaterng;
cvRandInit(&rng, 0, 1, -1, CV_RAND_UNI );
또한 cvRandSetRange 는 rng 상태 (CV RAND UNI / CV RAND NORMAL) 를 초기 화하 지 않 은 상태 에서 초기 화 된 rng 범위 및 관련 매개 변 수 를 변경 할 수 있 습 니 다.
예 를 들 면:
cvRandSetRange(&rng, 0, 0.1, 0 );
Rg. disttype = CV RAND NORMAL; / 위 에 Rg 를 CV RAND UNI 상태 로 설정 하고, 현 재 는 CV RAND NORMAL 로 변경
또한 CvRandState 데이터 구조의 매개 변수 내용 을 수정 할 수 있 고 고 르 게 분포 하면 각 채널 의 상하 계 정상 분 포 는 각 채널 의 평균 수, 표준 편차 등 을 수정 할 수 있다.
cvRandSetRange (CvRandState 데이터 구조, 상계 균일 분포, 하계 균일 분포, 목표 채널 데이터)
cvRandSetRange (CvRandState 데이터 구조, 정상 분포 평균 수, 정상 분포 표준 편차, 목표 채널 데이터)
채널 이 - 1 이면 모든 채널 을 변경 합 니 다.
cvRandNext 는 cvRandState 조건 에 맞 는 무 작위 수 를 생 성 할 수 있 습 니 다.
unsignedcvRandNext( CvRandState* state );
state
RNGstate initialized by RandInit and, optionally, customized byRandSetRange (though, the latter function does not affect onthe discussed function outcome).
Thefunction cvRandNextreturns uniformly-distributed (regardless of the RNG distributiontype settings) "plain" integer random number and updatesRNG state. It is similar to rand() function from C runtime library,but it always generates 32-bit number whereas rand() returns a numberin between 0 and RAND_MAX which is 2**16 or 2**32, dependingon the platform.

좋은 웹페이지 즐겨찾기