전체 글 58

05. 광학계 - 렌즈 해상력(Lens resolution)

렌즈 해상력 (lens resolution) 은 광학계의 최종 해상력을 결정하는 중요한 요소 중에 하나입니다. 본 포스팅에서는 렌즈해상력에 대한 개념, 렌즈 해상력 계산방법, 카메라 센서 해상력과의 매칭방법 등에 관련된 개념이나 관련 용어들을 전반적으로 정리해보았습니다. 0. 렌즈 해상력이란?1. 회절 (diffraction)과 해상력 (resolution) 2. 개구수 (numerica aperture)와 분해능3.  렌즈 해상력 계산식4. 카메라 센서 해상력과의 매칭 방법 0) 렌즈 해상력이란?렌즈 해상력이란 얼마나 작은 물체를 얼마나 큰 밝기 차이로 구분할 수 있는지를 나타내는 능력을 뜻합니다.렌즈의 해상력이 떨어지는 경우 비교적 큰 물체도 낮은 콘트라스트로 결상을 할 수 밖에 없고, 반대로 렌즈의..

비전 검사 2024.06.01

04. 광학계 - 공간 분해능(Spatial Resolution)

이번 포스팅에서서는 광학계 공간분해능에 대해서 알아보겠습니다.카메라 분해능이란 물체를 카메라로 찍을 경우 대상물의 목적하는 부분에서 (FOV)에서 카메라의 1pixel로 최소로 볼 수 있는 영역을 말합니다.이러한 광학계 분해능은 동일한 장면을 동일한 위치와 각도로 검사하더라도 카메라에 따라서 바뀔 수 있고, 동일한 카메라로 검사하더라도 광학계 세팅에 따라서 변할 수 있습니다. 따라서 검사하고자 하는 불량의 최소크기가 분해능의 2~3배가 되도록 광학기기 분해능을 결정한 후에 이에 맞게 카메라/렌즈/조명 등의 세부 사양을 결정하곤 합니다.오늘은 분해능에서 혼동될 수 있는 부분과 분해능에 따른 광학기기의 사양 결정방법에 대해 알아보겠습니다. 1. 공간 분해능(Spatial resolution)과 해상도(dis..

비전 검사 2024.06.01

03. 광학계 - 이미지센서의 비교(CMOS/CCD)

이번 포스팅에서는 CMOS 이미지센서와 CCD이미지 센서를 전격 비교해보겠습니다.이미지 센서는 빛을 전기적 신호로 바꿔주는 반도체이자, 피사체의 정보를 전기적인 영상신호로 변환해주는 촬상소자입니다.이미지 센서의 구성요소는 마이크로 렌즈 color filter array, pixel array, 등이 있습니다.이제 ccd와 cmos에 대해 자세히 알아보겠습니다. 1. CCD (Charge coupled device) 이미지 센서CCD는 전하를 수집, 저장, 전송할 수 있는 PIXEL ARRAY로 구성되어 있으며, 금속 산화막 반도체 (MOS)와 같은 방식으로 디자인하기 때문에 CCD 센서와 지원 칩(마이크로 프로세서, 메모리 등)을 통합하기가 어렵습니다.  - 구조CCD 센서는 각 픽셀에 조사되는 광량에 ..

비전 검사 2024.06.01

02. 광학계 - FOV(Field of vies) 계산

이번 포스팅에서는 카메라 FOV(Field of view)에 대해 알아보겠습니다.FOV는 카메라에 렌즈를 장착하여 대상을 촬영했을 때, 그 촬영한 영상의 사이즈를 뜻합니다.즉 fov는 카메라로 볼 수 있는 대상의 범위, 즉 카메라가 수집할 수 있는 검사 대상영역의 거리입니다. FOV = CCD 센서 사이즈 (H,V) / 렌즈 배율로 나타낼 수 있습니다.예시)카메라 : CREVIS MC-A121M-67 카메라 사양서를 살펴보면 Resolution이라고 표시된 것이 Active Pixels 즉 카메라의 유효화소 사이즈입니다.유효 화소사이즈란 CCD 센서의 총 Resolution 중에 실제로 영상이 출력되는 소자의 갯수를 표기한 것입니다.일반적으로 유효화소수가 총 화소수와 같을 때에는 Resolution으로 ..

비전 검사 2024.06.01

01. 광학계 - 라인스캔 카메라(Image Trigger Mode)

라인스캔 카메라의 Image트리거 모드는 크게 두 가지가 있습니다. Free - run mode는 카메라에 설정된 고정 노출 시간 동안 연속적으로 촬상하는 방식으로 카메라의 exposure time 변경 시 Line rate도 자동으로 변경됩니다. External image trigger는 트리거 souce의 신호를 받아 촬상하는 모드로 Line Scan 카메라의 Line rate를 Trigger 신호로 결정하는 이미지 트리거 모드입니다.이번 포스팅에서는 라인스캔 이미지 트리거 모드에 대해서 자세히 알아보겠습니다.  1. 라인 스캔 카메라 Image trigger mode- Free Run Mode Free Run Mode는 일정 yOffset 이후 카메라에 설정된 exposure time 에 만큼 쵤상..

비전 검사 2024.06.01

09. C++_동적으로 배열 할당하기

단일 변수에 대한 동적할당 외에 포인터를 활용하여 배열 변수를 동적할당 할 수 있다. 컴파일 타임에 배열 길이를 정하는 고정 길이 배열과는 다르게 배열을 동적으로 할당하면 런타입 동안에 배열 길이를 선택할 수 있다.동적으로 배열을 할당하려면, new 연산자와 delete연산자를 사용해야한다. 1. 1차원 배열 동적 할당 하기 1차원 배열은 배열의 이름이 곧 그 배열의 시작 주소이다.int형 자료구조의 방을 가리키는 num 포인터 변수에 생성하고자하는 size를 가지는 동적 메모리를 할당한다.#includeusing namespace std;int main() { //실행중에 배열의 크기 입력받아 1차원 배열 동적 할당하기 int length; int* num; cin >> length; num = new..

C++ 2024.05.16

02 C++ _ 클래스의 private/ public/ protected 접근지정 키워드

c++에는 c언어와는 다르게 클래스의 외부에서 멤버가 접근하는 권한을 부여하는 접근 지정자를 사용한다. C++은 public, private, protected 세 가지 접근 지정자를 제공한다. public은 공개 멤버이므로 클래스 외부에서도 접근할 수 있고, private는 비공개 멤버이므로 클래스 내에서만 접근할 수 있다. protected는 외부에서는 접근할 수 없으나, 상속된 자식 class에서 접근할 수 있다. 클래스 멤버는 기본적으로 private이지만, public 접근지정자를 사용해서 공개할 수 있다. 일반적으로 멤버변수는 비공개로 하고, 멤버 함수는 공개하는 것이 일반적이다. 1. Class 헤더파일에 private멤버와 public 멤버 선언 및 정의#pragma once#include..

카테고리 없음 2024.05.16

07. C++_call by value/call by pointer/ call by reference 이해하기

1. Call by valueCall by value란 함수 호출 시 넘기는 인자의 값이 매개변수에 복사 되어서 함수에서만 동작하도록 하는 것이다.Call by value로 전달된 매개변수는 함수 내의 지역 변수 역할을 하며 함수가 종료될때 함께 종료되어 사라진다.따라서 swap을 해도 값이 바뀌지 않는다. void callByValue(int a, int b){ int temp = a; a = b; b = temp;}int main() { int a = 10; int b = 20; callByValue(a, b); cout >> 10, 20  2. call by pointercall by pointer는 포인터를 통해 변수 a와 변수 b에 대한 주소를 직접 가져와서 함수 내부에서 포인터를 역참조(*a,..

C++ 2024.05.16

06. C++_기반클래스 멤버데이터 초기화

C++ 에서 기반 클래스의 데이터를 초기화하는 것은 주로 기반 클래스의 생성자(constructor)에서 수행됩니다.기반클래스(가전)에서 여러 파생클래스를 선언한 후(냉장고, TV, 에어컨) 파생클래스의 생성자를 호출하여 기반클래스의 멤버데이터를 초기화하기 위한 방법에 대해 알아보겠습니다.#include class Appliance{ std::string name; int powerConsumption;public: // 2. Appliance 의 생성자(2 augment)에서 자신의 멤버를 초기화 한다. Appliance(const std::string& name, int power) : name(name), powerConsumption(power) {}};class Airconditioner : ..

카테고리 없음 2024.05.15

05. C++_파일 입출력

파일 입출력 클래스는 fstream 클래스에 있다. 클래스의 open()메소드를 통해 파일을 열거나 생성할 수 있다. 파일을 닫을 때는 close()를 호출하여 명시적으로 파일을 닫을 수 있다.파일을 읽어들이는 방법으로는 한글자씩 읽어들이는 방법(get), 한줄씩 읽어들이는 방법(getline), 끝이 날때까지 읽어들이는 방법(!readFile.eof()) 등이 있다.#include #include using namespace std;int main() { //파일 쓰기 ofstream writeFile; writeFile.open("test.txt"); char str[256] = "wonderful world"; writeFile.write(str, strlen(str)); writeFile.clos..

C++ 2024.05.15