다들 로또 구매해보셨나요?


저는 가끔 기분전환용으로 로또를 구입합니다. ㅎ


월요일 쯤에 사면 당첨되면 뭐하지? 하는 상상과 함께 일주일이 잠깐 행복해져요. 토요일이면 물거품이 되지만요.. ㅋㅋㅋ


로또란?


나눔로또에서 판매하는 복권으로 45개의 숫자 중에서 여섯개를 고르고 숫자의 순서는 상관없으며 토요일날 숫자를 발표합니다.


로또 구매 장소는 편의점이나 로또방입니다.


모든 편의점에서 판매하는 것이 아니라 로또를 판매하는 곳은 편의점 밖에 Lotto라고 적혀있습니다! ㅎ


로또 복권을 판매하는 곳은 그리 많지 않고 보통 연금복권이나 즉석복권을 많이 팔더라고요.


얼핏 듣기로 로또 판매권도 경쟁이라고 들었습니다 ㅎ 


그렇다면 이제 로또 판매점에 가서 로또를 구매하는 방법을 알아보겠습니다.



로또 판매처에는 위와 같은 용지가 있습니다. 자신이 원하는 번호를 마킹해서 복권을 구매할 수 있습니다.


마땅한 번호가 없으면 자동으로 선택하면 컴퓨터가 랜덤으로 번호를 발급해줍니다.


대부분 5개 (5000원)을 구매하며 저는 보통 2개~3개를 삽니다 ㅎ


지갑에 잔돈이 있으면 가끔 저렇게 2개~3개를 자동으로 구매합니다.


자동이 오히려 확률이 더 높은거 같아요.



로또를 구매하면 다음과 같은 용지를 받게 됩니다. 그리고 결과 (토요일 오후 8시 45분)에 확인하시면 됩니다!


저는 보통 모바일로 저 용지에 있는 QR코드로 간단하게 확인한답니다! 


45개의 숫자 중에 6개를 모두 맞추면 1등입니다.


로또 1등에 당첨될 확률은 814만 5060분의 1이라고 합니다.


어마어마한 확률이죠.... 


수령 방법은


1등은 농협은행 본점에서


2등,3등은 농협은행 각 지점에서


4등,5등은 일반 판매점과 농협은행 각 지점에서 수령이 가능합니다.


1등의 당첨금은 총 당첨금(로또 전체 판매액의 50%) 중 4등, 5등 금액을 제외한 금액의 75%입니다.


그리고 로또에는 수많은 조작 의혹이 있습니다.


저도 한 번 찾아봤는데 꽤나 그럴 듯 하더라고요.


당첨 번호는 이미 정해져 있다. 공마다 무게나 재질이 달라 원하는 번호를 나오게 할 수 있다. 로또 추첨 이후에 로또가 판매되었다.


등의 조작의혹이 있습니다.


또한 외국에서도 로또 조작의혹이 있는데 재밌더라고요.


이런 조작 의혹도 있고 어마어마한 확률인 로또!


로또 당첨에 목숨걸지 마시고 그냥 소소하게 일주일의 행복을 구매한다는 생각으로 편안하게 구매하셨으면 하는 바램입니다.

저번 시간에 Grayscale에 대해서 알아보았는데요


흔히 Grayscale 다음에 하는 작업인 Edge Detection에 대해 알아보겠습니다.


엣지 디텍션 즉 윤곽선 검출은 사진에서 원하는 정도의 윤곽선을 검출해 내는 작업입니다.


저는 대외활동에서 이 엣지 디텍션을 로봇이 길의 경계선을 보고 수평을 맞추는데에 사용했습니다.


윤곽선 검출을 통해서 길의 경계선을 보고 기울기를 판단하여 수평을 맞추는 작업을 했었습니다.


엣지 디텍션은 비교적 쉬운 기법으로 좋은 결과를 얻을 수 있습니다.


먼저 윤곽선 즉 에지에 대한 개념을 알고 가겠습니다.


윤곽선(Edge)이란?


다른 명암도를 가진 경계선, 픽셀의 밝기가 임계값(Threshold) 보다 크게 변하는 경우


그러면 영상에서 윤곽선은 어떻게 찾느냐!


밝기의 변화량 가지고 찾는데 변화량은 미분을 통해서 알 수 있습니다. 


1차 미분 값에서 기울기의 크기로, 2차 미분값에서 기울기의 부호로 밝고 어두움을 판단 할 수 있습니다.


그러면 영상에서는 미분을 어떻게 하느냐!!


바로 마스크로 합니다.


마스크란 미분 연산자와 동일한 효과를 갖는 일종의 필터입니다.


마스크엔 기본 조건이 있습니다.


- 마스크 크기의 가로 세로가 같고 홀수여야 함

- 중심을 기준으로 상하좌우가 대칭이어야 함

- 중심의 수는 항상 0 이상의 양수이다.

- 모든 수의 합은 0이어야 함



우선 대표적인 1차미분 연산인 소벨(Sobel) 마스크를 예로 들어보겠습니다.



대칭적이고 모든 수의 합은 0입니다. 왼쪽이 세로방향에 대한 마스크, 오른쪽이 가로방향에 대한 마스크입니다.


저기서 2가 1로 -2가 -1로 바뀌면 Prewitt마스크입니다. Sobel마스크가 개선된 마스크입니다.


잡음에 조금 강하고 연산속도가 느린 편입니다.


위의 그림은 3x3 크기의 마스크고 5x5 크기의 마스크도 있습니다.




로버츠(Roberts) 마스크입니다. 왼쪽이 수직 마스크고 오른쪽이 수평 마스크입니다.


위의 소벨, 프리윗 마스크에 비해 연산속도가 빠릅니다.


엣지를 확실하게 검출할 수 있지만 매우 얇은 엣지가 검출되며 잡음에 약하다는 단점이 있습니다.


위의 마스크들이 대표적인 1차미분에 관한 마스크고 이제 2차미분에 관한 마스크를 살펴보겠습니다.



2차미분인 라플라시안 마스크!



라플라시안 마스크는 다른 마스크에 비해 종류가 많습니다. 


라플라시안 마스크는 잡음에 약하기 때문에 잡음을 줄여주는 Gaussian Smoothing을 적용한 후 


라플라시안 마스크를 연산하는 LOG(Laplacian of Gaussian)을 사용하기도 합니다.



그리고 잡음에 강한 캐니(Canny) 마스크!


캐니 마스크는 다른 마스크의 응용이라고 볼 수 있습니다.


사용법은 먼저 가우시안 필터로 블러링(평활화)을 해서 잡음을 제거합니다.



위의 마스크가 가우시안 필터 마스크입니다.


그 후 소벨 마스크와 같은 마스크 연산으로 엣지를 검출합니다.


그리고 Non-Maximum Value 제거를 합니다. 이건 좀 고급과정인거 같은데 평활화를 하여서 잘못 검출된 Edge를 제거하는 과정입니다.


Local Maximum Value만 남기고 가짜 엣지는 제거하는 과정입니다. 따라서 엣지가 좀 Sharp해집니다.


최대치 판단은 주로 3x3크기에서 가운데 값을 기준으로 상하좌우값을 비교해서 가운데 값이 크면 값을 남기고 아니면 제거합니다.


다음 과정은 Double Thresholding 와 엣지 연결과정입니다.


Threshold 즉 임계값을 2개(low, high)를 잡고 높은 임계값에서 검출된 엣지를 우선적으로 최종적인 엣지로 판단합니다.


그리고 낮은 임계값에서만 검출된 엣지 중에서 최종적인 엣지와 연관된 엣지만을 최종적인 엣지로 판단하고 나머지 즉 연관성 없는, 


잡음에서 엣지로 판단된 쓰레기값들은 버립니다. 그러면 최종적인 깔끔한 엣지가 검출됩니다.  


잡음에 강하고 꽤 이상적인 엣지 검출이지만 캐니 엣지 검출은 구현이 복잡하고 연산 속도가 느리다는 단점이 있습니다.


캐니 엣지 검출은 아래의 블로그에 그림과 함께 자세하게 설명되어 있더라고요!


http://carstart.tistory.com/188



참고로 코딩에서 마스크는 주로


int mask[3][3] = { {-1, 0, 1}, 

                       {-2, 0, 2}, 

                       {-1, 0, 1} }; 로 표현합니다.


이상 여러종류의 윤곽선 검출에 대해서 알아보았습니다!


이번 글은 프로그래밍 카테고리에 필수로 있어야 한다고 생각하는 C언어에 대해서 작성해보도록 하겠습니다.


프로그래밍의 기본이자 제일 중요하다고 생각하는 C언어! C language!


C는 1972년 벨 연구소에서 켄 톰슨과 데니스 리치가 유닉스 운영체제에 사용하기 위해 개발한 프로그래밍 언어입니다.


켄 톰슨이 B언어를 만들었고 데니스 리치가 이를 개선하여 C언어를 만들었습니다.


그리고 이후 나온 무수한 프로그래밍 언어가 C언어를 기반으로 만들어졌습니다. 


따라서 C는 실질적으로 모든 컴퓨터 시스템에서 사용 가능한 언어입니다.


그래서 대학에서 프로그래밍 언어를 배울 때 C언어를 제일 먼저 배우는 거 같습니다.


현재 윈도우에서 가장 많이 사용하는 C언어 IDE는 비쥬얼스튜디오(Visual stdio)입니다.


IDE란 통합 개발 환경을 뜻하고 통합 개발 환경이란 코딩, 디버그, 컴파일, 배포 등을 하나의 프로그램에서 처리하는 환경입니다.


몰랐는데 요즘은 마이크로소프트 홈페이지에서 비쥬얼스튜디오를 아예 무료로 제공을 하더라고요.


예전엔 드림스파크에서 학교메일을 인증하고 복잡하게 무료로 설치했는데 의외의 희소식이네요!


그것도 비주얼스튜디오2017을 커뮤니티 버전으로 제공한다고 하네요!!


처음하시는 분이나 다 까먹으신 분들을 위해서 친절하게 C언어 사용법을 알려드리겠습니다! ㅎㅎ


사용법 예제로는 Hello World가 최고죠!


저는 현제 Visual Studio 2013 사용중입니다.


C파일을 만들기 위해서 먼저 프로젝트를 생성해야합니다.


메인화면에서 Start - New Project를 클릭해도 되고 메인화면이 안보인다면


탭 File - New - Project  or  Ctrl+Shift+N 단축키를 사용하셔도 됩니다.


그리고 Templates - Visual C++ - General - Empty Project를 선택하시고 원하는 프로젝트 이름을 입력하고 OK를 클릭하시면 됩니다.

그리고 Solution Explorer - 해당 프로젝트 - Source Files - 오른쪽 마우스 클릭 - add - New item 을 클릭합니다.


C++파일을 선택하시고 파일명만 .c로 바꿔줍니다. 파일명은 상관없습니다! ㅎ



위와 같이 코드를 입력해줍니다.



만약 위와 같은 검은색 결과창 cmd 창이 바로 사라진다면 return 0; 바로 윗줄에 getchar();를 추가해보세요!


그러면 문자를 입력받을 때까지 멈춰있겠다는 뜻입니다.


그러면 간단히 코드를 살펴보겠습니다.  


#include <stdio.h>


int main()

{

printf("Hello World\n");

return 0;

}


Hello World를 통해서 C언어의 기본구조를 살펴보겠습니다.


#include <stdio.h>


이 줄은 헤더파일 stdio.h를 포함하겠다는 뜻입니다.


stdio는 Standard input/output의 줄임말이며 표춘입출력 라이브러리로 다양한 입출력 함수를 내장하고 있습니다.


int main()


중요한 main 함수입니다. 저는 이 프로그램이 뭐하는 프로그램인지 확인할 때 main함수부터 들여다 봅니다.


int는 출력형태 main은 메인함수여서 main으로 함수이름을 짓고 (void) 는 입력형태입니다.


그리고 중괄호{} 안에 주요 함수들과 변수들이 위치합니다.


printf();


stdio.h에 내장되어있는 출력함수입니다.  결과창에 원하는 내용을 출력합니다.


return 0;


return은 함수가 반환하는 값을 나타냅니다.


main 함수에서는 0을 반환하고 메인함수를 종료합니다.


모두 C언어 공부 화이팅입니다!!!

+ Recent posts