티스토리 뷰
## 영상 표현 방법
- 영상의 기본 단위를 픽셀 (pixel)
- 그레이 스케일 영상에서 하나의 픽셀은 0부터 255 사이의 정숫값을 갖음
- 하나의 픽셀을 표현하기 위해 컴퓨터에서 1 byte 의 메모리 공간을 사용
- 픽셀 값이 0이면 검정색, 255면 흰색
- 중간값은 검정색과 흰색 사이의 회색
- 0부터 255 사이의 정숫값의 범위를 그레이스케일 범위(grayscale level)
- 트루컬러 영상의 각 픽셀은 각각 0~255 범위를 갖는 R, G, B 세 성분으로 구성
## 영상의 1차원 배열 표현
[ 회색조 영상 ]
- g(x,y) = g"[y]"[x]"
- BYTE g[4*8]
- g(x,y) = g[y*8 + x]
[ 컬러 영상 ]
- B(x, y) = c"[y]"[3 X x]"
- G(x, y) = c"[y]"[3 X x + 1]"
- R(x, y) = c"[y]"[3 X x + 2]"
- BYTE c[4*20]
- B(x, y) = c[y*20 + 3*x]
- G(x, y) = c[y*20 + 3*x + 1]
- R(x, y) = c[y*20 + 3*x + 2]
## SIMD
- SSE 는 128bit 레지스터 사용, 4픽셀씩 처리(픽셀 하나가 32bit)
- AVX 는 256bit 레지스터 사용
```c++
// 지정한 배열 할당 시, 16바이트 단위로 정렬
__declspec(align(16)) float arr[4] = { }
// 부동 소수점 값 a를 dst의 모든 요소에 브로드캐스트(32비트)
// 32bit 부동 소수점 값을 브로드캐스트(8칸)
__m256 _mm256_set1_ps (float a)
// 메모리에서 dst로 256비트(포장된 단일 정밀도(32비트) 부동 소수점 요소 8개)를 로드
__m256 _mm256_load_ps (float const * mem_addr)
// a 와 b에 있는 포장된 단일 정밀도(32비트) 부동 소수점 요소들의 합
__m256 _mm256_add_ps (__m256 a, __m256 b)
// a 와 b에 있는 포장된 단일 정밀도(32비트) 부동 소수점 요소들의 곱
__m256 _mm256_mul_ps (__m256 a, __m256 b)
// 포장된 단일 정밀도(32비트) 부동 소수점 요소에서 b의 단일 정밀도(32비트) 부동 소수점 요소를 추출
__m256 _mm256_sub_ps (__m256 a, __m256 b)
// packing 된 32bit 부동 소수점 요소를 32bit 정수로 변환 후 결과 저장 (__m236i)
__m256i _mm256_cvttps_epi32 (__m256 a)
// packing 된 32bit 부동 소수점 요소를 packing 된 32bit 정수로 변환 후 결과 저장 (__m236i)
__m256i _mm256_cvtps_epi32 (__m256 a)
// packing 된 32bit 정수 요소를 32bit 부동 소수점으로 변환 후 결과 저장
__m256 _mm256_cvtepi32_ps (__m256i a)
/////
// 모든 요소를 0으로 설정
__m256 _mm256_setzero_ps (void)
// 메모리에서 256비트(패킹된 단일정밀(32비트) 부동 소수점 요소 8개) 저장
void _mm256_store_ps (float * mem_addr, __m256 a)
```
> Refer
> https://thebook.io/006796/
'PS > Algorithm' 카테고리의 다른 글
[Inflearn] 연속 부분 증가수열(LIS) (0) | 2020.04.21 |
---|---|
[Inflearn] Anagram(Google interview source) (0) | 2020.04.21 |
[Algorithm] 푸리에 변환(Fourier Transform) (5) | 2020.02.27 |
[Algorithm] 분할 정복(Divide & Conquer) (0) | 2019.09.10 |
[Algorithm] 재귀 호출(Recursion) (0) | 2019.09.02 |