2019년 11월 18일 월요일

BEFM - 부산 영어 방송 홈페이지 리뉴얼 과 네이티브 앱 오픈!! ㅎㅎ

안녕하세요ㅡ

부산사람이면 누구나!! 영어에 대한 열정이 있는 사람이라면 누구나!!
누구나 듣고 모르는 사람이 없는 BeFM 부산 영어 방송이 이번에 홈페이지를 리뉴얼 했어요

정말이지 대한민국에 살면서 영어에 관심이 많고 영어실력을 유지하기 위해서 모국어가 아닌 이유로 정말이지 많이 노력을 해야하지요 ㅠㅠ

그만큼 노출양이 중요한데 아무리 미드를 본다고 해도 아무리 유투브 방송을 챙겨본다고 해도 지속적으로 좋은  컨텐츠들을 찾기가 힘들어요 ㅠ

저는 출퇴근길 우연히 라디오 체널을 돌리다가 부산에 영어방송 브로드케스트 하는곳이 있구나 처음 알게 되었는데요, 

글로벌 부산이라는 말과 걸맞게 부산에 영어방송을 한다는것 자체가 너무나 좋은거 같아요.

짠~!!

이번에 리뉴얼된 홈페이지예요. 저는 윈도우를 검은색 컨셉으로 해서 쓰고 있는데요 ㅎㅎ
보통 호환이 잘안되서 홈페이지가 이상하게 보일떄가 많은데, 검은색 윈도우에도 엄창 깔끔하니 잘보이는거 같아요 ㅎㅎ
게다가 스케쥴표도 한눈에 알수 있어서 지금 라디오에서 나오는 방송을 곧바로 access 할수 있게 되어 있어요 ㅎ ㅎ넘나 좋음 ㅎㅎ




홈페이지에서 운영하는 메뉴들이예요 ㅎㅎ
다양한 라디오 프로그램 부터 뉴ㅠ스, 방송편성표등등 여러가지를 볼수가 있어요 ㅎㅎ

아래는 제가 출근시간에 매일매일 듣고 있는.. 저의 지루한 출근시간과 함께 하는  애정하는 두 프로그램 이예요 ㅎㅎ
케서린 언니 넘넘 좋아요 ㅋㅋ 목소리가 정말 좋거든요. 라디오 들으면서 같이 화도 내고 같이 안타까워도 하고 슬프기도 하고 넘나 공감을 잘해주세요


퇴근시간에 주로듣는 마이크윌러 아저씨의 인사이드 아웃 이예요 ㅎㅎ
사실 저는 목소리가 꽤 허스키하고 밤에 딱 맞는 다운톤 이라 나이가 좀 많은 40대 50대 아저씨인줄 알았어요 ㅋㅋ 그래서 마이크윌러 아저씨라고 불렀는데.. ㅎㅎ
엄머나 ㅎㅎ 젊은 청년이 있네요.. ㅎㅎ 암튼 마이크윌러 아저씨 애청하고 있어요 ㅎㅎ

부산을 대표하는 영어방송이기도 하고 대한민국에 몇 없는 영어방송이기도 하면서 좋은소식, 질좋은 컨텐츠를 끊임없이 연구하고 만들어내는 부산영어방송 너무 좋습니다. ㅠ

부산에 산다는것이 행복하네요 ㅎㅎ

모두 한번씩 이번에 리뉴얼된 부산영어 방송에 한번 방문해주세요!! ㅎㅎ
영어를 사랑하고, 영어에 늘 배고프고, 영어와 애증관계 있는 모든 영어인들 화이팅!! ㅎㅎ 


2019년 10월 15일 화요일

Realsense 3D

높이/해상도 셋팅 참고
: https://github.com/IntelRealSense/librealsense/issues/2723


At longer range, the depth accuracy will drift noticeably after 3 to 4 meters away from the camera. This is called RMS Error. It impacts the D435 model more than the D415 model due to the D435's hardware design. The link below has a chart that shows RMS error over distance for D415 and D435.
https://communities.intel.com/message/559606#559606


At very close range, the camera may also have less accuracy than the earlier SR300 camera model. This is because of how the 400 Series is configured to be able to 'see' up to 65 meters. It is possible to adjust the depth units of the camera to more closely match the SR300.
The link below explains this:
https://communities.intel.com/message/551089#551089


You would need to reduce the minimum sensing distance of the camera (MinZ). This can be done using the Disparity Shift setting. You can reduce minimum distance (how close the camera can get to an object) at the cost of reducing the maximum distance (MaxZ) that the camera can see.
For example, according to Intel's camera tuning guide, a Disparity Shift of '0' gives a MinZ of 45 cm and an infinite MaxZ, whilst setting the shift to '50' gives a MinZ of 30 cm and a MaxZ of 110 cm

Advaced Controls --> Depth Table --> Disparity shift

Using a D435 as well. With a distance of 20cm, I found that I need to apply "50.0" to the Disparity Shift Value for optimal results


I personally used C++ with Realsense, not python. But here is what I found.
python-rs400-advanced-mode-example.py
The area you should be interested in:
device = rs.context().query_devices()[0]
advnc_mode = rs.rs400_advanced_mode(device)
depth_table_control_group = advnc_mode.get_depth_table()
depth_table_control_group.disparityShift = 128
advnc_mode.set_depth_table(depth_table_control_group)
Source


[Realsense Customer Engineering Team Comment]
@laolaolulu
'another way to have smaller minZ is to reduce the depth resolution



--------------------------------------------------------------------------------------
배경 지우기 ( 실시간 rs-align )
https://support.intelrealsense.com/hc/en-us/community/posts/360033639413-Background-removal-with-OBS-and-the-D435

https://github.com/IntelRealSense/librealsense/tree/master/examples/align-advanced
----------------------------------------------------
How is it different from rs-align example?
rs-align is doing real-time background removal using simple masking and thresholding. This results in a fast but not a very clean results. This demo is performing pixel-level optimization to cut the foreground in the 2D image. The depth data serves only as an initial estimate of what is near and what is far.
---------------------------------------------------------------------------------
배경 지우기 ( GrabCut )
https://dev.intelrealsense.com/docs/rs-grabcuts

OpenCV 기본
https://github.com/IntelRealSense/librealsense/blob/master/doc/stepbystep/getting_started_with_openCV.md

개발자 사이트
https://dev.intelrealsense.com/docs/sdk-knowledge-base?_ga=2.79876628.2095552759.1571035529-351848016.1560499186









2013년 7월 4일 목요일

[ Triangulation ] Ear Clipping Algorithm 삼각기법 알고리즘

Ear Clipping 알고리즘은, 기존 Triangulation 알고리즘 중 가장 쉽고 널리 알려진 알고리즘이다

http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf

위 링크의 논문 참조 바란다.


논문을 바탕으로 정리를 하자면, 우선으로 다음과 같은 조건을 갖춰야한다.

1. Polygon line은 정렬 되어있어야 한다.
2. Polygon line 의 끝점과 시작점은 서로 만나야한다 ( Closed Curve )



다음과 같이 Simple 로 폴리곤이 정의 되어 있어야 한다.


폴리곤의 배열 순서는 다음과 같다.
P = [0,1,2,3,4,5,6,7,8,9]  (0과 9는 서로 만남)

삼각화를 하기전 데이타 분류작업이 선 진행 되어야 한다.

데이터는 다음과 같이 3가지 종류로 분류 된다.

1. reflex vertex
2. convex vertex
3. ear tip

reflex vertex는 P(i-1) 점과 P(i), P(i+1) 점을 잇는 각도가 시계방향으로 봣을때, 각이 180도보다 큰 각을 말한다.
reflex vertex는 P(i-1) 점과 P(i), P(i+1) 점을 잇는 각도가 시계방향으로 봣을때, 각이 180도보다 작은 각을 말한다.

ear tip은 P(i-1) 점과 P(i), P(i+1)으로 삼각형을 만들었을때, 삼각형 내에 다른 점들이 포함되지 않는 점의 모음이라고 할 수 있다.

예제 샘플에서의 분류는
C = {0,1,3,4,6,9}
R = {2,5,7,8}
E = {3,4,6,9} 
로 나눌 수 있다.



가장 먼저 해야 할 일은 Ear tip의 첫번째 상수인 P3을 제거 하는 일이다.
Ear tip 분류자체가 한점을 포함하지 않는 삼각형에 관한 점이기에 P3이 중심이되는 삼각형은 독립적으로 분류가 가능하다.

P3을 제거함으로써 ,P2와 P4가 변화를 갖게 되는데 첫번째 경우  P4는 convex값이다.

C = {0,1,3,4,6,9}
R = {2,5,7,8}
E = {4,6,9} 

그다음 Ear tip인 P4를 제거 한다.

P2는 여전히 Convex값을 가지지만 P5는 더이상 reflex값이 아니라 convex값으로 바뀐다.
relfex 리스트에서 P5는 제거 되고 ear list에 P5가 추가 된다.
C = {0,1,3,5,6,9}
R = {2,6,7,8}
E = {5,6,9} ( P4 제거 되고 P5 추가된 상태 )

변화에 따라 그다음 제거대상자인 P5를 제거한다.

P2가 reflex 였으나 이제 convex로 바뀌였다. 그러나 P2를 ear test 하였을경우 P7이 삼각형 안쪽으로 들어가므로, P2는 ear tip이 아니다.
R = {7,8} ( P2가 리스트에서 제거된 상태)
E = {6,9} ( P5가 제거된 상태 )


P6이 제거된 상태

 P2는 convex였으므로, 그대로 남는다. 하지만 Ear 그룹이 아니였음에도 불구하고, P6이 제거된 상황에서 재검을 하면 P2는 Ear그룹에 소속된다.
E = {9,2}

좀 이해안가는 문장이
The ear list is written this way because the new ear is added first before the old ear is removed. Before removing the old ear, it is still considered to be first in the list.

왜 ear list가 이렇게 배열 됬는지에 대해서, 이전 ear가 제거 되기 전에 새 ear가 먼저 추가 되어서라 한다. 이전 ear를 제거하기 전에 리스트내에 첫번째로 있어야할것이 아직 고려되기 때문이라 하지만, list 들을 훑다보면, 제거된 P6의 다음 은 7->8->9->0->1->2 이므로
9,2 순이 아닐까 한다.

아무튼 그다음 제거 대상 ear 인 P9를 제거한다.


P9이 제거된 상태

E = {0,2,8}

그다음 대상자인 0, 2,8 순으로 ear list 가 변경이 된다.

P0이 제거된 상태
E = {2,8}

P2가 제거된 상태

완성 상태! 

2013년 6월 12일 수요일

Vector 기본

항상 계산하던 벡터 개념이지만 늘 다시보려면 책을 보게된다
언제쯤 안까먹을지 -_-

1. Vector 란, 크기와 방향을 나타내는 수학적도구.
Vector3 v = [Vx,Vy,Vz] 로 구성된다.

2, Vector 의 성분 계산
V = B - A
V = (Bx, By, Bz) - ( Ax, Ay, Az)
V = (Bx - Ax), (By - Ay), (Bz - Az)
ex) Vector3 V = new Vector(Bx-Ax, By-Ay, Bz-Az);

3. Vector의 크기
벡터의 크기는 벡터의 화살표 길이다.
피타고리스 정리에 의해 "X값의 제곱 + Y값을 제곱 = (벡터의 크기)의 제곱"  공식
ex) float length = sqrt(x*x + y*y + z*z );

4. 단위벡터
방향만을 나타내는 벡터이며, 크기는 1이다
기존 벡터를 단위벡터로 만드는것을 정규화(Normalization)라고 한다.
기존의 벡터를 자신의 크기로 나누어주면 된다.
ex) Vector3 N = new Vector(x/length, y/length, z/length);

5, 벡터의 내적(각도) - 보통은 각도를 알기위해 쓰죠-
벡터의 곱셈은 내적과 외적으로 정의되며, 내적값은 스칼라값이다.
벡터A와 벡터B의 내적을 구하면 두 벡터가 이루는 각도가 나온다.

크기가 같은 두 벡터라 할지라도 두벡터사이에 각도에 따라 내적(크기)는 달라진다.

각 벡터의 성분간의 곱을 모두 더하면 벡터 A와 B의 내적이 나온다
ex) float dot = Ax*Bx + Ay*By + Az*Bz;

같은 벡터의 내적은 길이의 제곱이다.
ex) A.dot(A) == A.length * A.length


내적이 0이면 두벡터는 서로 직교한다 ( 법선벡터, Normal Vector 노멀벡터)
내적이 양수이면 두 벡터의 사잇각은 0 ~ 180도 사이다.
내적이 음수면 두 벡터의 사잇각은 180을 넘는다 ( 뒷면 판단시 사용 )

http://en.wikipedia.org/wiki/Dot_product

6. 벡터의 외적
두 벡터에 모두 수직한 벡터 ( 노멀벡터)를 값으로 가진다
AXB로 표현되는데, 교환법칙이 성립하지 않으므로, 순서에 주의

AXB = [A2B3 - A3B2, A3B1 - A1B3, A1B2 - A2B1]
ex) Vector3 Cross = new Vector( a.y*b.z - a.z*b.y, a.z*b.x - a.x*bz, a.x*b.y - a.y*bx )

http://en.wikipedia.org/wiki/Cross_product


2013년 6월 11일 화요일

STL File - Volume 구하기

아- 넘 졸리다..

얼마전 STL Vector정보가 3 Points 에대한 Vector 정보가 아닌, 쉐이딩 정보라는것을 Wiki 에서 발견했다.. -_-

나름 Grading 한 정보가 Vector 정보가 맞지 않아 고심했던 걸 생각하면 괴씸하군. 뒤통수 맞은 기분 ㅠㅠ

쉐이딩 정보를 어떻게 변환해야할지에 대해서는 아직 고심하지 않았지만,
볼륨을 구하는 목적의 프로그램에는 특별히 상관이 없어서 나중에 검토 하기로 했다.



Let we have field F(P)=P . It have constant divergence Ñ·F = 3 . Flow of F(P) through triangle ABC is 1/2 * A.BXC . Method above uses exactly that. (it indeed could be said that it just adds volume of pyramids. [grin] but you can derive it from divergence theorem (aka Gauss's Theorem) , and will not have problems proving that negative volume trick will work)

(2everyone who suggested my method explained in other tread, that only differs in "volume+=(v0.x+v1.x+v2.x)*Cross(v1-v0,v2-v0).x" (uses field F(P)=[P.x,0,0] with divergence 1) : it was made to simplify computation of volume of submerged object. In other cases, "pyramids method" is nicer)
       
Suppose you have a vertex array V[] of N vertices. The triangle list is an array I[] of 3*T indices into the vertex array and represents T triangles. Suppose the mesh is closed, each edge is shared by two triangles, and the mesh is not self-intersecting ("water tight" in the vernacular). Also assume that the triangles are counterclockwise oriented as viewed by an observer outside the mesh. Finally, assume that the mass density is constant (1). If nonconstant, the problem is much more difficult.

float volume = 0;
int* index = I;
for (i = 0; i < T; i++)
{
    Vector3 v0 = V[*index++];
    Vector3 v1 = V[*index++];
    Vector3 v2 = V[*index++];
    volume += Dot(v0,Cross(v1,v2));
}
volume /= 6;

2013년 6월 6일 목요일

세점으로 만들어지는 평면에 법선벡터 구하기(외적 구하기)

p(0,0,0), Q(2,4,6), R(-1,2,7)
이 세점으로 만들어지는 평면에 법선벡터 구하기.

P(0,0,0), Q(2,4,6), R(-1,2,7)에서 평면 PQR 의 법선벡터는
벡터 PQ 와 벡터 PR 에 공통으로 수직한 벡터입니다.
따라서 벡터 PQ와 벡터 PR 의 외적(크로스곱)을 구하면 됩니다.

벡터 PQ = Q - P = (2,4,6) - (0,0,0) = (2,4,6)
벡터 PR = R - P = (-1,2,7) - (0,0,0) = (-1,2,7)

(벡터 PQ) × (벡터 PR)
= (2,4,6) × (-1,2,7)
= (4 * 7 - 6 * 2)i - {2 * 7 - 6 * (-1)}j + {2 * 2 - 4 * (-1)}k
= 16i - 20j + 8k
= (16, -20, 8)

따라서 주어진 평면에 법선벡터는 (16, -20, 8) 입니다. 간단히 나타내려면 4를 나누어
(4, -5, 2) 라고 해도 무방합니다. (벡터의 실수배는 평행한 벡터이므로)


외적 구하는 법
사용자 삽입 이미지