본문 바로가기

전체 글

(87)
OpenCVSharp 카메라 제어 #2 ( Line Generator) 지난 포스팅에 이어 이번에는 출력되는 영상에 Line을 그려주는 코드를 넣어보도록 하겠습니다. 1. Main 화면에 지난번에 이어 HScrollBar 2개(min:0, max:640), VScrollBar 2개(min:0, max:480) 를 올립니다. * 각 ScrollBar 의 Maximum 크기는 화면의 크기와 동일하게 설정합니다. 2. TextBox 4 개의 올려 줍니다. 각각의 Name 속성을 다음과 같이 설정합니다. * textOffsetX, textOffsetY, textSizeX, textSizeY 3. CheckBox 를 1개 올려 줍니다. Name 속성은 checkLineDisplay 로 설정합니다. 4. 지난 포스팅에 기술한 카메라 제어 클래스에 아래의 코드를 추가해 줍니다. publ..
OpenCVSharp 카메라 제어 #1 ( 카메라 영상 출력 ) 장비제어 프로그램에서 빠질수 없는 부분이 카메라 제어 입니다. 기존에 C++ Builder를 이용하여 장비제어를 했을때도 OpenCV를 사용했지만 OpenCV 버젼이 올라가고 클래스 기반으로 라이브러리가 변경되면서 C++ Builder의 구조적인 문제로 인해 더이상 상위 버젼의 OpenCV 릃 사용할 수가 없었고, C#으로 개발툴을 변경하면서 OpenCVSharp을 적용해 보았습니다. 이번장에서는 기본적으로 카메라 영상을 화면에 출력하는 방법에 대해 구현합니다. 카메라 영상 제어를 위한 클래스를 구현했고 Thread 로 영상을 화면에 출력하도록 했습니다. 1. Winform 프로젝트를 하나 만듭니다. 2. nuget 에서 openCVSharp 관련 컨트롤을 등록시켜 줍니다. 3. MainForm 에 pi..
LED 의 색좌표 u', v' (CIE1976) 계산 알고리즘 스펙트로메타를 통해 LED의 스펙트럼 데이타를 추출한 후 색좌표 상의 u',v'(CIE1976) 을 계산하는 알고리즘 입니다. void CIE1976_Chromaticity(double* Wavelength, double* Spectrum, int Length, double& uPrime, double& vPrime) { double TristimulusX, TristimulusY, TristimulusZ; Tristimulus_Value(Wavelength, Spectrum, Length, TristimulusX, TristimulusY, TristimulusZ) ; try { uPrime = (4 * TristimulusX) / (TristimulusX + (TristimulusY * 15) + (T..
Laser Diode의 Threshold Current 계산 알고리즘 - Least Square Method - C++ LD(Laser Diode)는 낮은 전류에서는 LED처럼 동작하지만 일정전류 이상(임계전류) 부터는 발진이 되면서 광출력이 급격히 증가하는 현상이 나타나게 됩니다. LD 의 특성 평가에서 이 임계전류값은 중요한 특성지표로 사용이 됩니다.  임계전류를 계산하는 방식은 여러 방법이 있습니다. 이번장에서는 대표적인 방법으로 Least Square(직선근사) 방식을 이용한 Threshold Current 계산 코드를 적용하였습니다. 1. 계산 파라메타 ( 아래 이미지 참조 )  *  Pth1, Pth2 : 전체 측정 파워데이타 중에서 직선근사를 적용할 파워의 범위 ( 가능한 낮은 파워구간을 선택하는것이 좋다.)  * vector Power : 측정된 파워 데이타   * vector Current : 측정된 전류..
Least Square(최소 자승법) 실험적 데이타를 추출했을 경우 데이타의 경향성을 확인하기 위해 수학적으로 사용하는 직선근사를 C# 코드로 구현한 것입니다. 아래 코드는 추출된 X,Y 좌표 상의 데이타들을 Y축의 상한값과 하한값을 범위로 하여 일차 방정식으로 식을 추출하는 코드 입니다. public static (double slope, double yIntercept) GetLinearLeastSquaresFit(double[] dataX, double[] dataY, double lowYValue, double highYValue) { double slope=0, yIntercept=0; int index = 0 ; double count = 0 ; double xSummary = 0; double ySummary = 0; doubl..
Ocean Optics 사의 OmniDriver 제어코드 - C# Ocean Optics 사의 스펙트로메타 사용을 위해 제공되는 OmniDriver 를 C#으로 제어하기 위한 코드 입니다. OmniDriver 의 경우 JAVA 로 개발되었고 타 언어에서는 이것을 사용하기 위해 Wrapper 용 DLL 을 별도로 제공합니다. 1. OmniDriver 를 설치하시면 C:\Program Files\Ocean Optics\OmniDriverSPAM\OOI_HOME 폴더에 NETOmniDriver-NET40.DLL 파일이 있습니다. 이 파일을 참조로 추가하신 후 사용하면 됩니다. * 참고로 OmniDriver 설치 후 제공되는 매뉴얼에는 NETOmniDriver.DLL 이라고 명시되어 있는데 이 파일이 아니고 위에 써 있는 파일입니다. * 또한 참조 추가시에 프로젝트 참조로 하..
ScottPlot (Growing Data - #2) 지난 포스팅에서 ScottPlot 의 Growing Data 사용 방법에 대해 기술했습니다. 그러나 기본적으로 제공하는 사용방법이 불편하기도 할 뿐더러 코드도 길고 메모리 Overflow 의 위험성도 있어서 사용 방법을 변경해서 기술해 보았습니다. * 데이타 버퍼로 배열을 사용하지 않고 List 를 사용하여 메모리 누수를 예방했습니다. * 지난번의 문제점으로 지적된 X 축의 증가 Step을 조정할 수 없는 단점을 제거하였습니다. * 코드도 훨씬 간결해 졌습니다. 1. 데이타저장을 위한 클래스를 하나 구현해 놓습니다. 지난번과는 다르게 데이타 갯수를 알려주는 Index 가 없어졌고 X축의 값을 저장하기 위한 버퍼가 추가 되었습니다. public class MeasuredData { public readon..
ScottPlot (Growing Data - #1) C# 으로 개발툴을 변경하면서 고민중에 하나가 자주 사용하는 차트 컴포넌트를 어떻게 할 것인가 였는데 ScottPlot 컴포넌트를 발견하고는 유레카를 외쳤습니다.. 무료인데다 기능도 아주 뛰어나고 사용성에 있어서도 만족사용 하게 되었습니다.. 무엇보다도 Multi Axis 을 많이 사용하는 제 입장에서는 너무 반가운 컴포넌트 였습니다. 하지만 딱 한가지 아쉬운 부분이 시간의 경과에 따라 데이타가 늘어나는 그래프를 그릴 경우가 많이 있는데 특히 번인장비의 경우 시간에 따른 샘플의 특성 변화를 그래프로 실시간 보여주게 되는데 이게 ScottPlot 에서는 좀 간단하지가 않습니다. 이번 장에서는 기본적으로 ScottPlot 에서 Growing Data를 그리는 방법을 코딩합니다. ScottPlot 예제에서 나..