jdancor의 등록된 링크

키자드에 등록된 총 783개의 포스트를 확인하실 수 있습니다.

Naver Blog

합성준비 - Partitioning design for synthesis

design을 잘 partitioning을 해놓으면 합성할때 매우 효과적입니다. partitioning의 사이즈 제약 조건은 없고 설계자의 선택입니다. 너무 작게 partitioning을 하면 최적화에 좋지 않고, 너무 크게 partitioning을 하면 runtime이 길어지게 됩니다. design 재사용 (Partitioning for Design Reuse) 이전에 검증된 design을 다시 사용하게 되면 design, integration, and testing effort 을 줄일 수 있게 됩니다. instantiation 할 수 있게 design을 module화 해서 설계하는 것이 좋습니다. 설계: • 설계 인터페이스를 철저히 정의하고 문서화 만듭니다. • 가능하면 인터페이스를 표준화 하고 • HDL 코드를 module parameter 를 사용하여 만듭니다 . 이어지는 연산의 combination 회로는 유지하자(Keeping Related Combinational Lo

Naver Blog

Design compiler 합성 시간 개선방법

합성외 런타임을 개선 시키는 방법(Runtime Improvement Techniques Outside of Synthesis) 스크립트의 명령어르 순서대로 실행하다 보면 상당한 시간이 필요로 합니다. 이때 멀티 코어를 사용하거나 backgroun에서 병렬적으로 처리 한다면 runtime을 많이 개선 할 수 있습니다. 백그라운드 에서 명령어 수행(Running Commands in the Background) -bg 옵션과 redirect 명령어를 사용해서 백그라운드에서 돌리면 시간을 개선 할 수 있습니다. enable_redirect_bg_commands 명령어를 사용해서 back ground 에서 read-only 또는 non-read-only 명령어를 실행여부를 설정 할 수 있습니다. • -all (the default) : redirect -bg 명령을 사용하여 백그라운드에서 read-only 또는 non-read-only 명령어를 모두 실행 • -read_only: Run

Naver Blog

Design compiler의 synthesis flow

합성 flow 에 대해 간단히만 정리해 보고 넘어가겠습니다. 1. RTL 디자인 설계(Develop the HDL files.) verilog 또는 VHDL 과 같은 HDL 언어로 설계된 RTL 파일을 설계합니다. 설계 할 때 data management, design partitioning, and your HDL coding style 고려 해야 합니다. 2. library 파일 준비 (Specify the libraries.) link, target, symbol, synthetic, and physical libraries 파일들을 준비해야 합니다. 3. RTL 파일 또는 netlist 들을 툴로 불러오기(Read the design.) Design Compiler는 HDL Compiler 를 이용하여 RTL 또는 netlist 모두 읽을 수 있습니다. 그리고 .ddc 형식의 gate level의 netlist 도 읽을 수 있습니다. 4. 합성 환경 설정(Define the

Naver Blog

Design compiler 멀티 코어 사용하기

합성 시간은 설계자에게 매우 중요한 변수입니다 합성이 빠르면 빠를수록 결과를 확인하고 report를 확인 후 설계를 수정하는 작업을 많이 할 수 있죠 서버에서 멀티 코어를 설정해서 합성 runtime 에 도움 되도법에 대해 정리해보겠습니다. 멀티코어 기술을 사용하면 여러 코어를 사용하여 런타임을 개선할 수 있습니다. multicore 기능은 optimization tasks 를 작은 task로 나누어서 각각의 core에 처리 하게 함으로써 runtime을 줄일 수 있습니다. compile_ultra 명령어를 통해 multicore 기능을 사용할 수 있으며 DC Ultra in wire load mode and topographical mode, Design Compiler NXT, and Design Compiler Graphical 에서는 지원하지만 DC Expert. 에서는 위 기능을 지원하지 않습니다. 8개의 core마다 1개의 design compiler 의 licence가

Naver Blog

Starting the design compile tool

design compile 툴 실행방법 linux 환경에서 아래 명령어를 칩니다 dc_shell synopsys가 설치되어 있는 tool의 절대 경로가 지정되어 있어야 합니다. 상대 경로로 지정된 경우 실행이 안될 수 있습니다. % /tools/synopsys/2019.03/bin/dc_shell dc_shell을 scipt로 을 실행 시키고 싶으시면 -f 옵션을 사용해서 script file을 물려 주시면 됩니다 명령어를 추가로 실행 시키고 싶으면 -x 옵션을 사용하면 됩니다. gui 모드로 보고 싶다면 gui_start를 실행 시키면 됩니다. prompt> gui_start dc_shell이 수행되면 1. 명령 로그 파일을 생성. 2. .synopsys_dc.setup 파일을 읽고 실행합니다. 3. 각각 -f 및 -x 옵션으로 지정된 스크립트 파일 또는 명령을 실행합니다. 출력 되는 명령어를 참조 하고 싶을때 (Redirecting the Output of Commands) >

Naver Blog

Design compiler의 compile 전략

디자인을 컴파일하려면 DC Expert에서 compile 명령을 사용하거나 DC Ultra 또는 DC Graphical에서 compile_ultra 명령을 사용합니다. command option에 따라 최적화를 달리 할수 있습니다. design compiler 는 hdl 파일을 읽고, 최적화 하는데, design compiler는 library cell을 배치하는데 이때 designer가 설정한 attributes 와 constraints에 맞춰 functional, speed, and area를 경험적으로 최적화 하여 library cell을 배치 합니다 . 그 말인 즉슨 최신 버전일 수록 성능이 좋다라는 것입니다. 여러 회사의 경험이 쌓여 design compiler의 성능이 향상 되게 됩니다. 최적화는 timing과 area의 trade off 이며 area를 줄이기 위해 f/f을 적게 쓰면 그만큼 timing은 weak 해질 수 있고, timing 의 margin을 늘리기 위

Naver Blog

Design Compiler Modes

Design compiler를 수행 하기 위한 step에 대한 정리 Design Compiler Modes design compile 에서는 tool mode에서 Wire load mode 또는 topographical mode 중 하나를 선택 해야 합니다. Multimode 와 UPF mode 는 tool modes가 아닙니다 . multimode는 test mode and standby mode에서 다양한 conditions과 multiple modes를 operating 하는 mode 입니다. UPF 모드는 topographical mode에서 고급 저전력 방법론을 체크하는 모드입니다. wire mode는 delay estimation을 보기 위해 wire load 모델을보는 default 모드 입니다 . 여러분의 설계의 delay가 얼마나 되는지 확인 하는 것입니다. dc_shell을 실행 후 compile 명령어는 DC Expert를 실행합니다. DC Expert는 RTL을

Naver Blog

Design Compiler Setup file 만들기

design compile을 수행하기 위한 setup file이 필요합니다. 디자인 컴파일러를 시작하기 전에 $SYNOPSYS 변수가 설정되어 있고 bin 디렉토리에 대한 경로가 $PATH 변수에 포함되어 있어야 합니다 . /tools/synopsys/2014.09/bin/ 다음과 같이 디자인 컴파일러 설치가 포함된 Synopsys 경로를 나타내는 절대 경로를 지정해야 합니다. 상대경로를 쓰면 접근하지 못합니다. Design Compiler를 호출하면 synopsys_dc.setup 라는 파일을 자동으로 찾아 실행하게 됩니다. synopsys_dc.setup 에는 parameters and variable를 초기화 하고 design libraries를 선언하는 등의 명령어가 있습니다 . synopsys_dc.setup 파일을 찾기 위해 아래 순서대로 폴더를 찾게 됩니다. 1. The Synopsys root directory ($SYNOPSYS/admin/setup) 2. Your

Naver Blog

Design compiler의 용어 정리

많이 쓰는데 헷갈리는 용어 확인하고 갑시다~ Syntehsis 합성! • Synthesis is the process that generates a gate-level netlist for an IC design that has been defined with a hardware description language (HDL). 합성은 HDL(하드웨어 설명 언어)로 정의된것들 verilog, System Verilog, VHDL 을 gate level로 바꿔서 netlist로 바꾸는 것 입니다. gate란 and/or gate, flip flop, latch, mux 등을 말합니다. 즉 여러분의 RTL 코드가 nd/or gate, flip flop, latch, mux 의 조합으로 변경 되는것 입니다 . Synthesis includes reading the HDL source code and optimizing the design created from that descriptio

Naver Blog

Design compiler 란 무슨 tool 일까요

Design Compiler는 Synopsys회사의 tool 이며 설계자들이 만든 verilog 파일의 function 들을 optimize 하여 smallest하고 fastest 한 logic으로 바꾸는 기능을 합니다. RTL로 서술된 것을 실제 사용하는 combination 회로 또는 sequential 회로 등으로 바꾸는 것을 synthesis 즉 합성 이라고 말합니다. flat 하거나 hierachy 한 설계 모두 합성을 할수 있으며 combination 회로 또는 sequential 회로들을 speed, area, power 에 대해 최적화 기능을 제공하는 tool 입니다 design compiler 가 제공하는 기능 1. Early RTL exploration, which leads to a better starting point for RTL synthesis RTL을 보고, 어디에서 부터 합성을 해야 좋은지 찾는다. 2. Minimized power consumptio

Naver Blog

verilog - random 값 으로 테스트하기

module을 설계한 후에 테스트를 진행할 때 input으로 값을 넣어주고, 출력 값을 확인 하는 방식으로 검증할 때가 많습니다. input을 그때 그때 새로 셋팅하는 것은 손이 많이 가기 때문에 random 하게 하고 싶을 때가 많습니다. task random_input; input en; reg[7:0] data1; reg[7:0] data2; reg[7:0] data3; reg [31:0] a,b; if(en) begin data1 = $random(); data1 = $random(); data2 = $urandom(); data1 = $random()%10; // 0~9 까지 의 숫자를 random 하게 반환 data3 = $urandom_range(0,255); //0~255 까지의 숫자를 random하게 반환 a = $random%100; // a = -49~+49 사이의 임의의 정수 b = $urandom%100; // b = 0~99 사이의 임의의 정수 end $ra

Naver Blog

design compiler 에 쓰는 파일 형식 정리

*.v - verilog RTL source file. DC나 ICC에서는 Gate level netlist로 쓴다. *.ddc - synopsys internal database format. Design compiler에서 Write를 하면, ddc파일 형태로 포맷이 나옵니다. ddc는 RTL code, Top design 적용이 된 로직(Gtech, 부울식으로 풀린) 포맷입니다. ddc를 안하고 매번 베릴로그 파일을 읽고, top design 적용하고, 연결하고, Gtech으로 적용하면 많은 시간이 소요되어 이 포맷을 사용합니다. *.svf - 자동 셋업 파일. 보통은 이 파일로 default setup을 지정합니다. Formality 할 때 필요한 파일입니다. *.spef - standard parasitic exchange format. P&R하면 나오는데, 여기에 RC값 들어있어서 이 딜레이를 갖고 STA 할 때 쓴다. *.sdf - standard delay format

Naver Blog

openCV -CvMat 함수

CvMat 함수는 행렬 구조 자료 입니다. 멤버변수 변수설명 상수 상수설명 Type 행렬요소의 자료형 CV_8UC1 8비트, unsigned, 1채널 CV_8UC3 8비트, unsigned, 3채널 CV_32SC1 32비트, signed, 1채널 CV_32SC3 32비트, signed, 3채널 CV_32FC1 32비트, float, 1채널 CV_32FC3 32비트, float, 3채널 CV_64FC1 64비트, double, 1채널 CV_64FC3 64비트, double, 3채널 step 1행의 바이트 수 rows 행의 크기 cols 열의 크기 Type –채널은 행렬을 여러 장 포갠 것으로 생각하고, 최대 4개(R,G,B, Alpha)가지 가능 Step –행렬의 원소에 직접 접근할 때 유용하다. Rows와 Cols 는 행 우선순위로 저장되고 메모리 바이트 수는 4의 배수 이다. 행렬 요소의 첫 메모리 번지는 각 자료형에 따라 union data의 포인터 멤버 에 저장된다. typed

Naver Blog

openCV - 행렬(CvMat) 또는 영상(IplImage) 요소 접근(Get/Set)

행렬(CvMat) 또는 영상(IplImage) 요소 접근(Get/Set) cvSetReal*D : 1채널에서만 사용 idx의 지정된 요소의 값을 value값으로 변경 cvSet*D : 1, 2, 3 채널에서 사용 idx의 지정된 요소의 값을 value값으로 변경 cvGetReal*D : 1채널에서만 사용 idx의 지정된 요소의 값을 반환 cvGet*D : 1, 2, 3 채널에서 사용 idx의 지정된 요소의 값을 반환 cvmGet, cvmSet : 1채널, 실수행렬(CV_32FC1, CV64FC1)에서만 사용 cvmGet은 row, col 위치의 요소 값을 반환 cvmSet은 row, col 위치의 요소 값을 value 값으로 변경 cvPtr*D : 1, 2, 3 채널에서 사용 idx의 지정된 포인터의 자료형을 반환한다(type은 생략 가능) cvSet, cvSetZero cvSet은 arr의 모든 요소 또는 화소 값을 value로 변경 cvSetZero는 arr의 모든 요소 또는 화

Naver Blog

openCV - IplImage

IplImage 자료형 2차원 영상을 위한 자료구조 nChannel 채널의 개수로 1에서 4까지 정수 depth 화소의 비트 표현이다 (IPL_DEPTH_8U=8비트 unsigned 정수…) dataOreder 채널 자료의 저장 순서를 의미한다 - 0 : 인터리브 컬러 채널로 컬러영상에서 각 화소의 채널 값인 BGR이 저장되고 , 다음 화소의 BGR, 그다음 화소의 BGR이 저장되는 방식 - 1 : 분리 컬러 채널로 한 채널의 모든 화소가 저장된 후 다음 채널이 저장되는 방식 orgin 영상의 원점을 정의 한다 0 : 왼쪽상단이 원점 1 : 왼쪽 하단이 원점 width / height width는 가로 방향의 화소 , height는 세로 방향 화소 roi Null이면 전체 영상이 관심영역 coi는 관심채널로 0이면 전체 채널 1이면 0th 채널 나머지 변수는 영상내의 사각 영역을 나타냄 widthStep 한행의 바이트 수이다. 파일에서 영상 읽기 및 화면에 출력하기 IplImage*

Naver Blog

python - 텍스트 파일 처리하기

텍스트 파일에 관련된 함수들에 대해 다뤄보겠습니다 파이썬으로 파일을 읽고 다루고, 파일을 만들 수 있습니다. 텍스트 파일의 경우 line단위로 파일을 읽을 수도 있고 모든 데이터를 한번에 읽을 수 있습니다. open(), close(), read() fr = open('txt_read_ex.txt', 'r') txt_data = fr.read() print(txt_data) fr.close() open() 열고자 하는 txt 파일을 선언해주며, read 하고자 할때 r write 하고자 할때 w read() txt 파일을 읽어서 특정 변수에 저장하고자 할 때 close() close를 사용해서 변수를 닫아 줍니다 이 과정을 통해 컴퓨터의 메모리 사용을 줄여줍니다. readline() fr = open('read_ex.txt', 'r') line_data = fr.readline() while line_data : print("line_data : "+ str(line_data)) l

Naver Blog

openCV - cvLoadImage와 cvShowImage 함수로 이미지 뿌리기

openCV의 기본 function인 이미지 파일을 읽어와서 이미지를 show 하는 기능을 공유하고자 합니다. #include "stdafx.h" #include <cv.h> #include <cxcore.h> #include <highgui.h> int _tmain(int argc, _TCHAR* argv[]) { IplImage * img; img = cvLoadImage("d:\\test.jpg"); cvNamedWindow("HelloCV"); cvShowImage("HelloCV", img); cvWaitKey(); cvDestroyWindow("HelloCV"); cvReleaseImage(&img); return 0; } IplImage 이란 Image Processing Library 로서 이미지 구조체 관련 함수를 사용하기 위한 라이브러리 입니다. Image I/O (이미지 입출력) IplImage* cvLoadImage(image_path); 파일로 부터 이미지를

Naver Blog

openCV - 픽셀값 확인하기 CvScalar

픽셀(Pixel: Picture Element)이란 이전 글에서도 설명 하였는데 ㅎㅎ 이미지는 픽셀의 집합입니다. 픽셀이란 픽셀의 색: 적색(Red), 녹색(Green), 청색(Blue) 컬러의 수는 픽셀 당 비트 수(밝기 레벨) 입니다. 비트에 따른 색표현 Pixel의 값 = (위치, 색) 로 표현 할 수 있으며 위치 : 각 픽셀의 2D 좌표 (Image Coordinate System) 픽셀의 좌표 예시 색 : CvScalar (색을 저장하는 구조체) 색을 저장하는 변수 라고 이해하시면 편합니다. 4 개 이하의 숫자를 저장할 수 있도록 만든 구조체 struct CvScalar { double val[4]; }; 0번은 blue, 1번은 green, 2번은 red 값을 저장 Example) CvScalar s; s.val[0] = 200; (Blue) s.val[1] = 11; (Green) s.val[2] = 123; (Red) CvScalar cvGet2D (IplImage*,

Naver Blog

(18) image processing과 point processing 에 대하여

image processing 이란 한 이미지 f 를 새로운 이미지 g 로 만드는 과정 입니다 Image Processing의 두가지 : 1. 이미지 f 의 색을 변경하는 것 이미지 색을 변경 2. 이미지의 영역을 변경하는 것 이미지 영역을 변경 *image filtering: 이미지의 색상 값을 변경 g(x) = h(f(x)) 이미지 색상 변경 예시 이미지 색상 변경 예시2 * image warping: 이미지의 영역을 변경 g(x) = f(h(x)) 이미지의 영역을 변경 예시 이미지의 영역을 변경 예시2 Point Processing 가장 단순한 Image Filtering: 이미지의 점의 위치 x,y 에 상관없이 일괄적인 변환 적용 g = t(f) Important: 모든 이미지 점 하나하나가 독립적으로 처리됨 –점들의 상관관계 정보를 전혀 사용하지 않음 이미지 각 Pixel의 RGB 밝기정보 값의 범위 : 0~255 포인트 프로세싱의 정의: g = t ( f ) point p

Naver Blog

openCV 라이브러리 정리

openCV에서 각 기능별 어떤 libray를 include 해야 하는지 표로 정리해 보았습니다. OpenCV 1,x, 2.0, 2.1의 주요 라이브러리 구조 라이브러리 주요기능 CXCORE 기본 자료구조, 행렬연산, 그리기 함수 등 CV 영상특징 추출, 필터링, 영상분할 등 HIGHGUI 윈도우 관련 함수, 영상 읽기/저장 함수 등 ML Bayes 분류기, 결정트리 등 기계학습 관련 함수및 클래스 CXAUX 스테레오 대응점 계산, 뷰 모핑 등 라이브러리 설명 Opencv_core 기본자료구조, 행렬 연산, 그리기 등 Opencv_imgproc 필터링, 히스토그램 처리, 컬러 변환 등의 영상처리 알고리즘 구현 Opencv_highgui 윈도우 관련 GUI, 영상 및 비디오I/O Opencv_ml Bayes 분류기, 결정 트리 등 기계학습 알고리즘 Opencv_features2d 2D 특징 디스크립터 Opencv_video 움직임 검출 및 물체 추척 Opencv_objdetect 영상

Naver Blog

openCV - CvPoint, CvScalar, CvSize,CvRect 함수 기능 및 사용 예시

CvPoint CvPoint는 각 화소 또는 2차원 점의 좌표를 표현하기 위한 구조체입니다. 자료형 멤버 변수 인라인 함수 설명 CvPoint x,y cvPoint int형 2D 화소위치 CvPoint2D32f x,y cvPoint2D32f float형 2D 화소위치 CvPoint2D64f x,y cvPoint2D64f double형 2D 화소위치 아래 그림과 같이 x,y를 받는 구조체 입니다. CvPoint 의 inline 함수이며 CV_INLINE CvPoint cvPoint(int x, int y) { CvPoint p; p.x = x; p.y = y; return p; } CV_INLINE CvPoint2D32f cvPoint2D32f (double x, double y) { CvPoint p; p.x = x; p.y = y; return p; } CV_INLINE CvPoint2D64f cvPoint2D64f (double x, double y) { CvPoint p; p.

Naver Blog

python - 리스트에서 많이 쓰는 함수

range() - 정수 리스트 만들기 list_data = range(5) print(list_data) # [0, 1, 2, 3, 4] list_data2 = range(5,10) print(list_data2) # [5, 6, 7, 8, 9] range(출발 , 끝) : 출발 숫자 부터 끝 숫자 미만 까지만 만들어 냅니다. index() - 리스트 특정 요소 위치 찾기 list_data = ["1", "2", "3", "4", "5"] print(list_data.index("5")) # 4 출력 list_data2 = ["잠실", "역삼", "선릉", "수서"] print(list_data2.index("잠실")) # 0 출력 위치 값은 0 부터 시작 하기 때문에 2의 위치는 1 에 해당합니다. 리스트의 특정 값 바꾸기 list_data = ["잠실", "역삼", "선릉", "수서"] list_data[3] = "강남" print(list_data) # ["잠실", "역삼",

Naver Blog

python - 문자열에서 많이 쓰는 함수

짝수 문자 또는 홀수 문자만 추출하기 str_data = "문자열에서 많이 쓰는 함수" print(str_data[1::2]) # 짝수 문자만 출력 print(str_data[::2]) # 홀수 문자만 출력 문자열 거꾸로 추출하기 str_data = "문자열에서 많이 쓰는 함수" print(str_data[::-1]) #수함 는쓰 이많 서에열자문 출력 문자열 합치기 str_data1 = "우리는 " str_data2 = "하나다" str_data3 = str_data1 + str_data2 print(str_data3) # 우리는 하나다 출력 if ~ in - 함수 특정 문자있는지 확인하는 방법 str_data = "문자열에서 많이 쓰는 함수" if "수" in str_data : print("Pass") else : print("Fail") len() 함수 - 문자열의 길이 구하기 str_data1 = "python" str_data2 = "안녕" str_data3 = "." pr

Naver Blog

python - bit 추출해보기

비트 연산자 의미 A & B A와 B 비트간의 and 연산을 수행 A | B A와 B 비트간의 or 연산을 수행 A ^ B A와 B 비트간의 exclusive or 연산을 수행 ~A A의 모든 비트를 반전 시킴, 즉 A의 보수를 만듬 A >> n A의 모든 비트를 n 만큼 오른쪽으로 쉬프트 A << n A의 모든 비트를 n 만큼 왼쪽으로 쉬프트 비트 연산자를 사용해 bit추출하는 예시를 공유해드립니다. 하위 2bit 추출하기 data = 10 # 0b1010 print(data&0x3) # 0b10 하위 3bit 추출하기 data = 10 #0b1010 print(data&0x5) #0b010 8bit 데이터의 상위 4bit 추출하기 data = 255 #0b1111_1111 print(data>>4 & 0x0f) # 0b1111 #python #파이썬 #bit추출 #bit연산

Naver Blog

(14) python - 예외처리

try: print("start code") print(param) except: print('occurring execption') try: print("start code") print(param) except: print('occurring execption') else: print('normal mode') try: print('start code') print(param) except: print('occurring execption') finally: print('Last operating code') #파이썬 #python #try #exception

Naver Blog

python - input 함수, 입력받기

파이썬에서는 input() 함수를 사용해서 직접 키보드로 데이터를 입력 받을 수 있습니다. fscanf 와 비슷한 기능이지만 파워풀 하죠 print("값을 입력한 후 Enter를 입력해 주세요") k = input() print(k) 사용자가 타이핑을 친 후 엔터를 입력하면 작성한 구문이 print 됩니다. 입력 받은 데이터를 문자열 변수로 바로 사용 가능 하기 때문에 용이 합니다. #파이썬 #python #input #입력받기

Naver Blog

python - 수식 연산에서 필요한 함수들

나머지 구하기(%) mod_data = 10%3 print(mod_data) # 1 % 연산자를 사용해서 나머지를 구하면 됩니다. 몫과 나머지 구하기(divmod) data1, data2 = divmod(10,3) print("몫 : "+str(data1)) # 몫 : 3 print("나머지 "+str(data2)) # 나머지 : 1 divmod 함수를 사용하면 동시에 몫과 나머지를 구할 수 있습니다. 10진수를 16 진수로 변환하기 (hex) print("10 의 16 진수 값은 : + str(hex(10))) # 10의 16진수 값은 0xa hex() 함수를 사용하면 int 형 데이터를 16 진수로 표현할 수 있습니다 val = 15 print("%02X"%val) # 0F print("%02x"%val) # 0f print("%01X"%val) # F print("%01x"%val) # f 10진수를 2 진수로 변환하기 (bin) print("10 의 2 진수 값은 : + st

Naver Blog

(13) python - 클래스 class

클래스 많이 들어보셧죠? 객체지향 프로그래밍에서 중요한 개념입니다. 클래스는 설계코드를 별도의 공간으로 관리해서 name space 이름 공간 이라고도 부릅니다. 클래서에서 변수 역할을 하는 클래스 맴버와 함수는 동일한 기능을 하는 클래스 메소드 class method 입니다. 클래스 맴버나 메소드는 클레서 공간 내에서 정의 되며 보통의 함수나 변수와 비슷합니다. class MyClass: var = '안녕하세요' def sayHello(self): print(self.var) obj = MyClass() # MyClass 인스턴스 객체 생성 print(obj.var) # ‘안녕하세요’가 출력됨 obj.sayHello() # ‘안녕하세요’가 출력됨 class class_name : 클래스 맴버 정의 캘르새 메소드 정의 obj.클래스 맴버 # MyClass 의 클래스 맴버 obj.클래스 매소드 # MyClass 의 클래스 메소드 클래스 맴버 와 인스턴스 맴버 class member a

Naver Blog

(1) 영상처리 고인물 인사드립니다.

#영상처리 #c언어 #C++ # verilog #image #processing #python #hardware #software 안녕하세요 영상처리 고인물 입니다. 지금은 회사에서 직장인 생활을 하고 이며 대학교, 대학원, 회사에서 계속 영상처리 관련된 일을 하고 있습니다. 그동안 제가 책, 인터넷, 논문 을 통해 쌓은 지식을 나누고자 합니다. 여러분에게 많은 도움이 되었으면 좋겠습니다. 저의 블로그 타겟은 대학교에서 영상처리 수업을 듣는 학생분들 회사에서 영상처리 관련 업무를 하시는 분들 입니다. 저는 엄청 어렵고 복잡한 영상처리 관련 이론은 대학원때 까지만 했고, 막상 회사에 와서 보니 스마트폰(삼성, 아이폰) 및 차량 업체(현대, 기아, 벤츠, bmw, audi) 에서 필요하다고 하는 기능의 영상처리를 하게 되었는데 회사에서 하는 영상처리는 생각보다 항상 간단 하였습니다. 대학원때 공부했던 그런 어려운 내용의 영상처리를 다루기는 저도 기억이 안나 어려울것 같아서.. ㅎㅎ 지금

Naver Blog

(2) 영상에 대한 기본 용어를 정리하며, Lena 라는 이미지를 아시나요?

아래의 lena 라는 이미지를 아시나요?? 대학교에서 영상처리를 처음 공부하는 학생들 이라면 모두들 한번 보셨을꺼에요 사실 이 이미지는 영상처리를 이용한 프로젝트나 실험 결과를 비교하기 위해 필수적인 이미지랍니다. 구글에 lena 라고 쳐보세요 사실 누드 사진.. 이랍니다... 아마 처음 영상 처리를 시작하는 남성께서 즐거움을 위해 고르신것 같은 합리적인 의심을 하게 됩니다. 아마 영상처리를 시작하는 여러분도 여러분이 좋아하는 연예인의 이미지를 먼저 다운 받고 있으실 꺼에요. 분명.. 512x512 의 pixel로 이루어진 이 lena 라는 흑백 이미지를 가지고 교수님이 과제를 내 주실꺼에요 저도 이 이미지를 보고 영상처리 강좌를 시작 하고 싶었습니다 ㅎㅎ 일단 쓰는 용어들을 몇가지 정리해야 앞으로의 강좌들의 이해에 도움이 될것 같아나름 간단하게 정리하고 가봅시다 픽셀 모니터에 보여지는 이미지는 많은 점들이 모여서 우리눈에 보여지는데, 모든 점들 하나하나를 픽셀 (pixel, 화소)

Naver Blog

(3) 이미지의 픽셀 값을 보는 방법, 이미지를 보는 툴(tool) 추천 그림판, gimp를 사용하자

영상처리는 이미지의 픽셀 값을 바꾸는 것 이라고 설명을 드렸습니다. 그러면 이 픽셀 값을 어떻게 보는지 알아야 하겠죠 그림판 그림판을 통해 쉽게 볼수있는데 색선택 도구를 클릭하고 보고자 하는 픽셀을 클릭한다. 색편집을 클릭하면 내가 선택한 색의 정보가 나옵니다. 픽셀의 값은 빨강, 녹색, 파랑(Red, green, blue RGB)로 표현도 해주고 색상 채도 명도 로도 알려줍니다 (나중에 자세히 다룰 예정) 김프 GIMP 그림판도 좋지만 gimp 라는 무료 툴이 구글에 검색을 하면 바로 뙇 다운 받을 수 있습니다. https://www.gimp.org/ GIMP GIMP - The GNU Image Manipulation Program: The Free and Open Source Image Editor www.gimp.org gimp 강력 추천합니다. 먼저 그림판과 동일하게 픽셀 값을 읽는 방법은 색상추출 도구를 클릭하고 보고자 하는 픽셀을 클릭한다. 정보창사용을 클릭하면 내가 선

Naver Blog

(3) 나만의 이미지를 만들어 보자, PPM 파일

이미지를 만들어 보신적이 있나요? 영상처리 또는 화질 개선을 하는 사람에게 내가 만든 알고리즘을 테스트 하기 위한 테스트 이미지 패턴을 만드는 것은 매우 중요합니다. 적절한 이미지를 만들어야 내가 만든 알고리즘을 검증하기 편리하기 때문이죠 이미지를 만드는 것은 생각 보다 쉽습니다. (압축이 어려운 것이에요..) PPM (Portable PixMap) 형식 가장 이해하기 쉬운 이미지를 만드는 법은 PPM 포맷입니다. 3개의 Header 정보와 pixel 정보만 입력하면 됩니다. heaer의 구성은 아래와 같습니다. 1. 매직넘버 이미 standard로 정해진 것으로서, PPM 포맷을 위해서는 P3 또는 P6를 사용해야 합니다 2. 해상도 이미지의 가로, 세로를 지정 하는 것으로 원하시는 크기를 입력 하시면 됩니다. 3. 픽셀의 max 값 8bit의 이미지를 만들것인지, 10bit 이미지를 만들 것 인지 지정하게 됩니다. 다음 이미지의 픽셀값을 지정 하는 방법은. 아래 이미지와 같이 매

Naver Blog

(1) C++, 이미지를 PPM 파일로 만들기로

PPM 파일에 대해 공부해 보았으니 C++ 로 PPM 파일을 만들어 보도록 하겠습니다. 기본적인 C 언어에 대해서는 잘 아시겠죠? ㅎㅎ 먼저 아래 그림을 한번 만들어 보겠습니다. 간단하게 fprintf 만으로 단순하게 write 하면 아래와 같이 작성 할 수 있습니다. 아래의 이미지를 for문을 사용하여 만들어 보도록 하겠습니다. 위와 같이 만들 수 있습니다. clipping 또는 threshold 여기에서 하나 집고 넘어 가고 싶은것은 이 구문 입니다. pixel 값이 255 보다 크면, pixel 값을 255로 변경하고 255 이하 라면 pixel 값을 유지 하라는 구문입니다. 이유는 pixel의 max 값을 255로 지정하였기 때문에 pixel 값에 255를 넘는 값 또는 0보다 작은 값은 있으면 안되기 때문입니다 이를 clipping 또는 threshold 라고 부릅니다. 쉽죠? ㅎㅎ 여러분 이렇게 쉽게 ppm 파일을 만들수 있습니다. 도움이 되셨을까요?? 사실 file wr

Naver Blog

(1) python 으로 이미지를 PPM으로 만들기

PPM 파일에 대해 공부해 보았으니 python 로 PPM 파일을 만들어 보도록 하겠습니다. python의 file write 기능을 통해서 먼저 아래 그림을 한번 만들어 보겠습니다. 단순한 방법으로 file write 하면 아래와 같이 작성 할 수 있습니다. 너무 쉽죠.. 코딩은 쉬울수록 좋은거에요 ㅎㅎ 직관적이어야죠 파이썬의 for문을 사용하해서 위의 이미지를 python을 작성하면 위와 같이 만들 수 있습니다. 어때요? 하실수 있겠죠? f1이라는 파일을 open 하고, f1.write 라는 명령어를 사용하여 차근차근 작성하시면 됩니다. for문 사용하실수 있겠죠?? ㅎㅎ 파일은 txt 파일로 첨부해 드립니다. 여러분 모두 화이팅 첨부파일 ppm_gen.py 파일 다운로드 #파이썬 #python #ppm파일 #파일쓰기 #filewrite #print 쓰기

Naver Blog

(2) C언어 PPM 형식의 이미지 파일을 읽어보자

앞 글에서 PPM의 대해 이해해 보고, PPM 파일로 이미지도 만들어 보았습니다. 그러면 누군가가 만들어 놓은 이미지를 읽어와야 저희가 원하는 이미지 처리를 할수 있겠죠? PPM 파일로 이미지 파일을 읽는 이유는.. 매우 쉽기 때문입니다 물론 요즘 openCV 또는 python의 라이브러리 함수에서 이미지를 읽을 수 있도록 지원을 해주지만 여러분 C 언어로 기본을 아는것이 중요합니다. 그래서 이번엔 그 기본을 해보도록 하겠습니다. 먼저 header 파일을 읽어야 합니다. PPM의 해더 형식 기억 하시죠? 기억 안나시면 아래 글 참고 바랍니다. ㅎㅎ https://blog.naver.com/jdancor/222859511112 (3) 이미지의 픽셀 값을 보는 방법, 이미지를 보는 툴(tool) 추천 그림판, gimp를 사용하자 영상처리는 이미지의 픽셀 값을 바꾸는 것 이라고 설명을 드렸습니다. 그러면 이 픽셀 값을 어떻게 보는지 ... blog.naver.com 파일을 읽기 위해서 f

Naver Blog

(2) 파이썬 PPM 형식의 이미지 파일을 읽어보자

C 언어로 조금 자세하게 PPM 이미지 파일을 읽어왔는데 너무 간한하게 python으로 읽어 오는 방법을 휙 ~ 기술해 보고자 합니다. 사실 이건 PPM 파일이 정상적이라면, 이라는 가정하에 제가 간단하게 만든 코드여서 ㅎㅎ 공유드려 봅니다. 제가 리눅스 기반으로 작업을 많이해서 args 로 선언된 코드를 가져왔는데 args[0] 으로 선언된 곳에 "image.ppm" 으로 선언해 주시면 되지요~ file 읽어서 data에 모두 저장하면 일단 거의 다 한거에요! 그리고 몇가지 옵션을 쫌 할건데 먼저 모든 데이터를 split() 라는 함수를 써서 띄어쓰기를 기준으로 한줄 한줄 데이터를 나누어 다시 저장합니다. 그리고 혹시 모를 ppm 파일에 기술된 주석들을 다 지울꺼에요 #으로 선언된 줄이 있다면 그 뒤로는 다 삭제 하게 됩니다. 만약 #앞에 데이터가 있다면 그 데이터는 살려야 겠죠? ㅎ strip() 함수와 split 함수를 써서 데이터를 조금더 정렬해 줄수 있는데 split 함수는

Naver Blog

(4) 영상의 밝기를 조절하자, Arithmetic Operation

영상의 밝기를 조절 하는 법에 대해서 알아보도록 하겠습니다. 영상의 밝기(brightness) 조절은 이미지를 밝게 하거나 어둡게 하는 것을 말합니다 이미지의 픽셀값들을 읽어서 전체적으로 offset을 주어서 다같이 밝게 만들거나 어둡게 만들 수 있고 gain을 곱하여서 특정 비율로 밝게 만들거나 어둡게 만들 수 있습니다. pixel의 값은 8bit 데이터의 경우 0~255를 가지며 픽셀 값이 작을수록 어둡고, 픽셀 값이 클 수록 밝습니다. 따라서 offset이 양수일 경우 이미지를 밝게 만들고, 음수일 경우 어둡게 만드는 연산이죠 그런데 연산 후에 pixel의 최대 최소인 255보다 크거나 0보다 작을 경우는 어떻게 해야 할까요? 이럴때 이미지가 포화 (saturation) 되었다고 표현하고 합니다. 그리고 최대 최소보다 크거나 작은것을 방지하기 위해 clipping, clamping 또는 threshold 라고 하는데 이를 위해서 조건문을 달아 주어야 합니다. 위의 수식이 추가로

Naver Blog

(3) C언어 영상의 밝기를 조절하자

이전 블로그 내용 (4) 영상의 밝기를 조절하자 : 네이버 블로그 (naver.com) 을 가지고 직접 C 코딩을 해보고 공유 하고자 해요 일단 매우 간단합니다. 데이터가 2차원 배열에 저장되어 있다고 시작하겠습니다. 2차원 for문을 생성해서 height와 widht 만큼 for문을 돌며 모든 pixel 값을 읽어 가져옵니다. offset 방식 아래 수식을 그대로 거의 타이핑 해주면 됩니다. 수식을 알면, 알고리즘 코딩은 어렵지 않습니다. 수식에서는 pixel_tmp를 새로 만들었지만 software의 장점이 무엇입니까? 변수 그대로 가져와 계속 쓸수 있다는 장점이 있죠, 단점은 원본이 훼손된다는것. 로직 설계하는 사람은 아실꺼에요 이러면 안된다는것... gain 방식 동일하게 아래와 같이 타이핑 슈슈슉 하면 금방 끝납니다. ㅎㅎ 이번 글은 코드를 공유하는데 있습니다. 내용을 이미 이전 블로그에 설명을 다해서 .. ㅎㅎ 코드 다운 받아 사용하세요 첨부파일 imgae_brightne

Naver Blog

(4) 히스토그램 평활화, Histogram equalization 명도개선

히스토그램이 무엇인지 아시나요?? 히스토그램 histogram 영상의 픽셀들이 어떻게 분포되었는지를 나타내는 것 입니다. 8bit의 픽셀 데이터가 있다고 했을 때 히스토그램은 한 이미지 내에서 픽셀 값이 가지는 0~255값이 각 각의 몇개나 있는지를 정리화 하여서 어느 범의가 값이 많이 나오는지 알아보기 위한 수치입니다. 레나 이미지의 히스토그램 분포도 입니다 . 만약 위 이미지에 offet +50 연산을 통해 이미지를 밝게 만든다면 이미지의 히스토그램은 이와 같이 변하게 됩니다. offset 연산이 궁굼하시다면 이전 블로그를 확인해 주세요 ㅎ https://blog.naver.com/jdancor/222862018828 (4) 영상의 밝기를 조절하자, Arithmetic Operation 영상의 밝기를 조절 하는 법에 대해서 알아보도록 하겠습니다. 영상의 밝기(brightness) 조절은 이미지를 ... blog.naver.com 히스토그램 평활화, histogram equaliz

Naver Blog

(4) C언어, 히스토그램 평활화, Histogram equalization 명도개선

히스토그램 평활화 또는 평탄화( Histogram equalization) 의 이론을 바탕으로 C언어로 설계를 해보겠습니다. 이론은 이전에 작성한 글을 참고해 주시면 감사하겠습니다. https://blog.naver.com/jdancor/222862855598 (4) 히스토그램 평활화, Histogram equalization 명도개선 히스토그램이 무엇인지 아시나요?? 히스토그램 histogram 영상의 픽셀들이 어떻게 분포되었는지를 나타내는... blog.naver.com 먼저 영상의 히스토그램을 분석해야겠죠? 여기에서 image size는 픽셀의 크기입니다 8bit 픽셀 데이터 일때 image size는 256이고 10bit 픽셀 데이터 일때 image size는 1024가 되겠습니다. void make_histogram(double **temp,double * histogram){ int i,j,k,max; for(i=0; i<image_size; i++) { // 0 으로 초

Naver Blog

(5) Contrast Stretching, end_in search, 컨트라스트 확장

영상의 명암 대비는 밝은 화소들과 어두운 화소들의 분포에 의하여 결정 됩니다. 낮은 명암대비를 가진 영상들은 대부분 어둡거나 대부분 너무 밝아 뚜렷하지 않아 흐린 이 미지를 가지게 되됩니다. 따라서 히스토그램도 균일하게 있는 것이 아니라 일정 부분에 모여 있게 되죠 이에 반해 높은 명암 대비를 가진 영상은 밝은 값 중간 , 값과 어두운 값을 균 등하게 가지고 있고, 히스토그램역시 균일 하게 퍼져 있어 영상이 뚜렷하게 잘 보입니다. 따라서 좋은 명암 대비를 가진 이미지란 넓은 범위에 데이터 값을 가진 이미지를 말합니다. end_in search end_in search 방법은 특정부분에 명암 값이 치우치는 히스토그램을 가질 때 이 히스토그램을 스트레칭 시켜 영상 히스토그램이 모든 범위의 화소 값을 포함하도록 영상을 확장 시키는 것을 말한다 이를 위해선 일정 양의 화소를 흰색 또는 검정색 값을 잦도록 지정해야 하며 임계 값을 정하게 되는데 임계 값은 low의 임계값과 high의 임계값

Naver Blog

(5) C언어, Contrast Stretching, end_in search, 컨트라스트 확장

Contrast Stretching에 대해 C언어 설계를 공유해 보도록 하겠습니다. 이론 설명은 이전에 작성한 글을 참고해주세요~ https://blog.naver.com/jdancor/222863788607 (5) Contrast Stretching, end_in search, 컨트라스트 확장 영상의 명암 대비는 밝은 화소들과 어두운 화소들의 분포에 의하여 결정 됩니다. 낮은 명암대비를 가진 영... blog.naver.com 먼저 low threshold와 high threshold에 설정하는 값을 x1과 x2의 입력으로 받도록 입력 변수를 추가해주었습니다. pixel 의 min과 max 는 8bit pixel 기준으로 0과 255로 x0과 x3에 할당하였습니도 만약 8bit가 아닌 픽셀값의 이미지에 적용하실 때에는 이부분을 바꿔주세요 define의 velo# 값을 통해 stetching의 되는 low threshold와 high threshold 구간의 이미지 스트레칭 구간에

Naver Blog

(6) 영상 필터링 처리 이론과 이미지 패딩

핸드폰에서 아래 기능중 고대비 글자 라는 기능을 보신적 있나요? 해당 기능을 키면 고대비 글자 off --> 고대비 글자 on 해당 기능에 따라 글자가 달라지는게 보이시나요? 이런 이미지 변화는 어떻게 이루워지는지에 대해서 설명해 보도록 하겠습니다. 해당 기능에 대해서 이야기 하기 위해서는 많은 이야기를 시작해야 하는데 먼저 어려운 용어이지만 convolution 이라는 용어에 대해 공부 해야 합니다. Convolution 위키피디아에 매우 복잡하게 설명되어 있는데 https://en.wikipedia.org/wiki/Convolution Convolution - Wikipedia Convolution From Wikipedia, the free encyclopedia For other uses, see Convolution (disambiguation) . Visual comparison of convolution, cross-correlation , and autocorrelat

Naver Blog

(7) 영상 필터링 처리 엠보싱 샤프닝 블러링 미디언 필터 설명

영상 또는 이미지를 필터를 통해서 다양하게 변화하도록 해보려고 합니다. 필터를 통과한다 라는 것은 컨볼루션(convolution) 이라고 해서 아래 글을 확인해 주세요 설명해 보려고 나름 노력해 보았습니다. https://blog.naver.com/jdancor/222865940949 (6) 영상 필터링 처리 이론과 이미지 패딩 핸드폰에서 아래 기능중 고대비 글자 라는 기능을 보신적 있나요? 해당 기능을 키면 해당 기능에 따라 글자... blog.naver.com 엠보싱 Embossing 먼저 영상에 엠보싱 이라는 처리를 해보려고 합니다. 엠보싱이 뭔지 결과 이미지 부터 보고 시작하시죠 원본 엠보싱 처리 엠보싱이라는 단어는 휴지에서 들어보셨을 꺼에요 푹신 푹신한 느낌을 주는 단어라는거 기억나시죠? 단어 뜻은 오목블록한 것 입니다. 영사처리된 결과를 보시면 알겠지만 음각으로 이미지가 표현되죠? 저런식으로 이미지를 바꿀려면 도대체 어떤 필터를 써야 될까요? 엠보싱 필터 엠보싱 필터는 위

Naver Blog

(6) C언어, 영상 필터링 처리 엠보싱 샤프닝 블러링 미디언 필터

영상 처리, 이미지 처리의 필터처리에 대해 간단한 예제들을 해보고자 합니다 엠보싱 샤프닝 블러링 미디언 처리에 대해서 하나하나 코드를 공유하면서 알고리즘을 다시 보고자 합니다. 알고리즘에 대한 일차적인 자세한 설명은 이전글에 한번 작성하였으니 한번 더 보시는 것도 좋을 것 같습니다. https://blog.naver.com/jdancor/222866250550 아래 순서대로 이미지를 처리 해보고자 합니다. 이미지를 double 형으로 바꾸는 것은 연산에 필요한 소숫점 을 최대한 살리기 위함입니다. 이미치 처리 flow chart 먼저 필터를 처리하기 위해서 이전에 이미지 패딩을 수행해 주어야 합니다. https://blog.naver.com/jdancor/222865940949 (6) 영상 필터링 처리 이론과 이미지 패딩 핸드폰에서 아래 기능중 고대비 글자 라는 기능을 보신적 있나요? 해당 기능을 키면 해당 기능에 따라 글자... blog.naver.com 이미지 가장자리에 있는 픽

Naver Blog

(8) 엣지 검출, 유사연산자 차연산자 1차 미분 2차 미분

영상 또는 이미지에서 엣지만 찾을 수 있다면 정말 다양한 작업을 할 수 있습니다 이미지 센서 등에서도 이미지 자체를 사용하다보면 영상의 량도 많고 처리할때 어려운게 많습니다. 보통 전처리로 엣지만을 찾은 작업을 많이 수행하기도 합니다. 어떻게 엣지를 찾는지 하나하나 알아보고자 합니다 유사 연산자 차 연산자 1차 미분 2차 미분 유사 연산자 유사 연산자 가장 단순하고 빠른 에지 검출기방법으로, 일련의 화소들을 감산한 값에서 최대값을 찾는것 입니다. 중심 픽셀로부터 주변의 8픽셀들을 각각 감산하고 출력은 그 차이의 절대값 중에서 가장 큰 값으로 대체 하는 방법입니다. 샤프니스 필터를 할때 기억나시나요? 주변 평균과 얼마나 차이가 나는지를 구한 다음 그 값 만큼 offset으로 적용을 하였었죠? 차 연산자의 방식도 주변과 얼마만큼 차이가 나는지 구하는 방법입니다. 모두 고주파 방식의 필터를 취하는 방법입니다. 원본 유사 연산자 방식 차연산자 차연산 설명 유사 연산자 방식을 수행하기 위해

Naver Blog

(7) C언어, 엣지 검출, 유사연산자 차연산자 1차 미분 2차 미분

이론은 이전 글에서 열심히 설명했는데 한번 보고 코드를 보시면 쉽게 따라 오실수 있습니다 ~~ https://blog.naver.com/jdancor/222867595236 (8) 엣지 검출, 유사연산자 차연산자 1차 미분 2차 미분 영상 또는 이미지에서 엣지만 찾을 수 있다면 정말 다양한 작업을 할 수 있습니다 이미지 센서 등에서도 이... blog.naver.com 유사 연산자 // 유사연산자 마스크 void homo(double **in,double **out){ int i,j,u,v; double value,diff; double **mask; mask= mem_alloc_double(3,3); for(i=0;i<height;i++) for(j=0;j<width;j++){ for(u=0;u<3;u++) for(v=0;v<3;v++){ mask[u][v]=in[i+u][j+v]; } diff= abs(mask[1][1]-mask[0][0]); value=diff; diff= a

Naver Blog

(9)이미지 기하학 처리 (사이즈 조절, scale)

기하학 처리 라고 하면 어렵게 느껴지실수 있지만 이미 여러분들은 많이 하고 있으십니다. 기하학 처리 - 사이즈 조절 (scale), 회전 (transfrom), 이동 (transfrom) 입니다. 먼저 사이즈 조절(Image scale)에 대해 알아 보도록 하겠습니다. 핸드폰을 하다 보면 손가락으로 이미지를 축소 확대 할때가 많이 있죠? 이 모든게 이미지 사이즈 조절, 즉 image scaling 입니다. 카메라로 사진을 찍어서 또는 영상작업을 통해서 만들어진 원본 이미지가 만들지게 됩니다. 우리는 특정 목적을 가지고 원본 이미지를 훼손하게 되는데 용량이 너무 크기 때문에 줄이고 싶어서 사이지를 작게 만들 때가 있고, 잘 안보여서 확대 할때가 있습니다. 이미지를 확대할 때는 없던 픽셀 개수가 늘어나는 것이기 때문에 없던 픽셀을 새로 만들어야 하고, 이미지를 축소 할 때는 픽셀 개수를 줄여야 하기 때문에 기존의 이미지 정보가 없어지게 됩니다. 새로 만들어지는 픽셀 또는 없어지는 픽셀을

Naver Blog

(8) C언어, 이미지 기하학 처리 (사이즈 조절, scale)

C언어로 설계하는 시간이 돌아왔습니다. 이전 영상처리 수업에서 설명한 https://blog.naver.com/jdancor/222868632839 (9)이미지 기하학 처리 (사이즈 조절, scale) 기하학 처리 라고 하면 어렵게 느껴지실수 있지만 이미 여러분들은 많이 하고 있으십니다. 기하학 처리 - ... blog.naver.com 1. nearest interpolation (가장인접 화소 보간법) void nearest_copy(unsigned char **in,unsigned char **out,int height_chscale_factore,int width_rth_chscale_factore,float scale_factor){ int x,y; for(y=0; y<height_chscale_factore; y++) { for(x=0; x<width_rth_chscale_factore; x++) { out[y][x]=in[int(y/scale_factor+0.5)][in

Naver Blog

(10) 이미지 기하학 처리 - 회전 rotation

일상속에서 많이 접하고 있으신 이미지 기하학 처리의 회전을 알아보는 시간입니다. 기하학 처리 - 사이즈 조절 (scale), 회전 (transfrom), 이동 (transfrom) 입니다. 설정한 각도에 따라 이미지를 회전 시키는 것으로서 수식에 의해 픽셀의 값을 이동 시키면 됩니다. 만약 없는 픽셀 이라면 이미지 interpolation 방법으로 픽셀을 새로만들어야 하죠 이미지 회전 이미지 회전 수식 이때 픽셀 이동시에 없는 픽셀을 만들어야 할때는 이전 블로그 글을 공부해 주세요 어렵지 않습니다. ㅎㅎ https://blog.naver.com/jdancor/222868632839 (9)이미지 기하학 처리 (사이즈 조절, scale) 기하학 처리 라고 하면 어렵게 느껴지실수 있지만 이미 여러분들은 많이 하고 있으십니다. 기하학 처리 - ... blog.naver.com 설계로 아래 interpolation을 이용한 rotation들을 각각 공유해 드리겠습니다 . 1. Nearest

Naver Blog

(9) C언어, 이미지 기하학 처리 - 회전 rotation

C언어로 설계하는 시간이 돌아왔습니다. 이전 영상처리 수업에서 설명한 이미지 기하학처리의 회전 rotation 를 설계해 보는 시간이 왔습니다. https://blog.naver.com/jdancor/222869630940 (10) 이미지 기하학 처리 - 회전 rotation 일상속에서 많이 접하고 있으신 이미지 기하학 처리의 회전을 알아보는 시간입니다. 기하학 처리 - 사이즈 ... blog.naver.com 회전 수식 가장 중요한 것은 위의 수식입니다. 다시 한번 기억해 주세요 ~ 회전 결과물 Center를 기준으로 회전 하는 코드는 추가로 또 올리겠습니다. 1. Nearest interpolation void rotation1(unsigned char** in, unsigned char** out, double scale_factor, int height_r, int width_r) { int i, j; double X_src, Y_src; double X, Y; int X_d

Naver Blog

(10, 추가) 이미지 기하학 처리 - 회전 rotation

이미지 회전에 대해서 코드를 추가하겠습니다. 이전에는 (0,0) 픽셀 기준으로 회전을 하였지만 https://blog.naver.com/jdancor/222869630940 (10) 이미지 기하학 처리 - 회전 rotation 일상속에서 많이 접하고 있으신 이미지 기하학 처리의 회전을 알아보는 시간입니다. 기하학 처리 - 사이즈 ... blog.naver.com Center를 기준으로 회전하는 코드입니다. 회전 결과물 1. Nearest interpolation void center_rotation1(unsigned char** in, unsigned char** out, double scale_factor, int height_r, int width_r) { int i, j; double X_src, Y_src; double X, Y; int X_d, Y_d; double cen_X = (int)width_r/2; double cen_Y = (int)height_r/2; for(i

Naver Blog

(11) 영상 패터닝, 디더링, 오류확산

영상처리에서 패터닝, 디어링, 오류확산 이라고 들어 보신적 있나요?? 비슷한 내용이지만 살짝 살짝 다른 알고리즘이니 하나하나 알아 보도록 하겠습니다. 그전에 먼저 디지털 간색 이라고 들어 보셨나요? 디지털 간색 (Digital Halftoning) 디지털 간색 이란 0과 255의 gray 만을 사용하여 모든 화소의 밝기 값을 표현 하는 방법입니다. 사람의 눈의 시각적인 특성을 이용하는 기법으로 일종의 착지 현상을 이용하는 개념이고 디지털 간색 을 사용해서 패터닝, 디더링, 오류확산 이라는 알고리즘을 만들게 됩니다. 패터닝 (Patterning) 패턴 이라는 단어는 많이 들어보셨을 텐데, 스마트폰 패턴 암호 라고 보통 패턴이라는 단어를 사용하죠 하지만 영상처리에서 패터닝은 특정 픽셀을 나타낼 때, 특정 패턴으로 대체해서 표현하는것 입니다. 1개의 픽셀을 4x4의 16개의 픽셀로 확장 시켜서 각 픽셀에 밝기 값에 따라서 0과 255로 이루워진 패턴 메트릭스 (Pattern Matrix)

Naver Blog

(11)C언어 -영상 패터닝, 디더링, 오류확산

패터닝, 디어링, 오류확산에 대해서 C언어 코드를 공유하는 시간이 돌아왔습니다. 이론은 이전 글에서 다시 한번 확인 부탁드립니다 ㅎㅎ https://blog.naver.com/jdancor/222873211592 (11) 영상 패터닝, 디더링, 오류확산 영상처리에서 패터닝, 디어링, 오류확산 이라고 들어 보신적 있나요?? 비슷한 내용이지만 살짝 살짝 다른 ... blog.naver.com 패터닝 (Patterning) void pattern(unsigned char **in,unsigned char **out){ int i,j,u,v; unsigned char mask[4][4]; unsigned char mask1[4][4] = { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }; unsigned char mask2[4][4] = { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,255,0,0} }; unsigned char mask3[4][

Naver Blog

(12) 영상압축의 기본 DCT와 IDCT

여러분이 보시는 이미지들은 모르셨을 수도 있겠지만 모두 압축과 비압축 과정을 거쳐 저희 에게 오게 됩니다. 원본 이미지 (Raw image)는 사실 매우 큰 데이터를 가지고 있습니다. 성능 좋은 디지털 카메라로 이미지를 16bit의 픽셀 데이터를 가지고 있으며, 해상도 역시 매우 크죠, 이런 이미지를 저희가 가지고 있는 하드웨어 장치에 저장을 하게 되면 용량의 압박이 매우 크고, 이런 용량이 큰 이미지를 통신을 통해 주고 받으려면, 통신 데이터 사용도 매우 크기 때문에 이미지를 압축 하고 비압축하는 과정이 중요합니다. 이때 이미지의 손실(loss) 여부도 매우 중요합니다 비손실을 위해서는 압축률이 매우 떨어질 수 밖에 없으며 손실을 일어나도 압축률이 매우 높다면 손실을 감안 할수 있겠죠 이때 이미지가 손실 되더라도, 사람 눈에 티가 나는지 여부가 trade off 가 됩니다. 이미지 JPEG 압축 과정중 첫번째인 DCT와 IDCT 오늘 알아 보도록 하겠습니다 . DCT (Discre

Naver Blog

(12) C언어, DCT와 IDCT

DCT (Discrete Cosine Transform)/ IDCT (Inverse Discrete Cosine Transform)의 C언어를 공유해 보도록 하겠습니다. 설명과 수식은 아래 글에 작성하였습니다. https://blog.naver.com/jdancor/222874151244 (12) 영상압축의 기본 DCT와 IDCT 여러분이 보시는 이미지들은 모르셨을 수도 있겠지만 모두 압축과 비압축 과정을 거쳐 저희 에게 오게 됩니... blog.naver.com DCT 수식 #define M 8 #define N 8 #define PI 3.14592 #define COEFF 0.70710 void dct(double *inf,double*outf) { int x,y,i,j,u,v; double cv,cu; double accum=0.0; for(i=0;i<LENA_SIZE/M;i++) for(j=0;j<LENA_SIZE/N;j++){ for(u=0;u<M;u++) for(v=0;v

Naver Blog

(13) 영상압축의 기본 DCT와 IDCT 처리후 양자화 Quantization

이전 글에서 DCT와 IDCT를 알아 보았습니다 DCT라는 변환 식을 통해서 이미지 데이터를 주파수 데이터로 전환을 이루었습니다. 이번 글에서는 DCT를 통과한 데이터에 양자화 라는 작업을 해보도록 하겠습니다. DCT와 IDCT는 아래 글을 통해 확인해 주시면 감사하겠습니다. https://blog.naver.com/jdancor/222874151244 (12) 영상압축의 기본 DCT와 IDCT 여러분이 보시는 이미지들은 모르셨을 수도 있겠지만 모두 압축과 비압축 과정을 거쳐 저희 에게 오게 됩니... blog.naver.com 양자화를 통해 압축을 진행하게 되는데 DCT의 결과에서 평균적으로 일반 이미지들은 저주파에 데이터가 모여 있고, 고주파에는 데이터가 상대적으로 적습니다. 저주파는 보통 면과 같이 픽셀 값의 변화가 적은 부분들을 의미하고 고주파는 선 같이 픽셀 값의 변화가 큰 부분들을 의미 합니다 따라서 저주파 부분의 데이터가 많이 모여 있게 됩니다. DCT 이후 이미지한 결

Naver Blog

(13) C언어, 영상압축의 기본 DCT와 IDCT 처리후 양자화 Quantization

이전 글에서 설명하였던 양자화에 대해서 C언어 코드를 공유해보도록 하겠습니다 이론은 이전 글을 확인해 주세요 https://blog.naver.com/jdancor/222874756058 (13) 영상압축의 기본 DCT와 IDCT 처리후 양자화 Quantization 이전 글에서 DCT와 IDCT를 알아 보았습니다 DCT라는 변환 식을 통해서 이미지 데이터를 주파수 ... blog.naver.com 양자화는 이전에 공유한 수식을 보시면 알겠지만 매우 간단합니다. 양자화 방법 Encoded 양자화 Decoded 양자화 Encoded 양자화 void dct_q(double *data){ int i,j,x,y,u,v; for(i=0;i<M*M;i++) for(j=0;j<N*N;j++){ for(u=0;u<M;u++) for(v=0;v<N;v++){ *(data+(i*M)*LENA_SIZE+(j*N)+u*LENA_SIZE+v) /= table[u][v] ; *(data+(i*M)*LENA_

Naver Blog

(14) 영상압축 공간 예측 - Spatial Prediction

이전 블로그에서 DCT와 IDCT로 이미지 데이터를 주파수 영역으로 변환 하였고, 주파수 영역으로 변환된 데이터를 양자화 라를 방법을 통해 압축 해보았습니다. 기억이 안난다면 다시 이전 글을 한번 확인해 주세요~ https://blog.naver.com/jdancor/222874756058 (13) 영상압축의 기본 DCT와 IDCT 처리후 양자화 Quantization 이전 글에서 DCT와 IDCT를 알아 보았습니다 DCT라는 변환 식을 통해서 이미지 데이터를 주파수 ... blog.naver.com 이번 시간에는 이미지 데이터의 공간예측 이란 알고리즘을 사용해서 압축 하는 방법에 대해 설명해 보고자 합니다. 그전에 먼저 예측 Prediction이 무엇인지 알아 보도록 하겠습니다 . Prediction 예제 그림 1 X1~X5의 데이터를 공간예측이란 예제를 통해 데이터 량을 줄어 보도록 하겠습니다. 예제 그림 2 X1~X2의 데이터를 로 값을 재 정렬 을 하고 나면 e는 error

Naver Blog

(14-1) C언어, 영상압축 공간 예측 - Spatial Prediction Encoder

이전 글에서 설명하였던 공간 예측에 대해서 C언어 코드를 공유해보도록 하겠습니다 혹시 이론을 안보고 이글을 먼저 보셨다면 이론은 아래 글에 설명하였습니다 https://blog.naver.com/jdancor/222874763158 (13) C언어, 영상압축의 기본 DCT와 IDCT 처리후 양자화 Quantization 이전 글에서 설명하였던 양자화에 대해서 C언어 코드를 공유해보도록 하겠습니다 이론은 이전 글을 확인해... blog.naver.com 블록도 기억하시나요? Encoder의 순서도 위의 순서도를 보면서 Encoder의 코드를 보면 빨리 이해가 되실것 같습니다. Encoder TOP void encoder(double *data, double *in,double *out,double *out_en,double *label){ int i,j,u,v,k; double *mask_o,*mask_b,*mask_p,*mask_e,*mask_re; double * temp, *ma

Naver Blog

(14-2) C언어, 영상압축 공간 예측 - Spatial Prediction Decoder

이전 글에서 설명하였던 공간 예측에 대해서 C언어 코드를 공유해보도록 하겠습니다 Encoder 는 이전 글에서 따로 설명 하였고 이번에는 Decoder 에 대해서 다뤄보겠습니다. 이론은 이전 글을 확인해 주세요 https://blog.naver.com/jdancor/222875614355 (14) 영상압축 공간 예측 - Spatial Prediction 이전 블로그에서 DCT와 IDCT로 이미지 데이터를 주파수 영역으로 변환 하였고, 주파수 영역으로 변... blog.naver.com Decoder의 설계는 Encoder의 한 부분을 가져오는 것과 같습니다 Encoding을 할때 미리 Decoding의 결과를 예측하여 가장 lossy가 적은 방법으로 Encoding을 하기 때문에 Encoder에 Decoder 의 설계가 다 들어 있기 때문입니다. Encoder의 순서도 Encoder에서 전송되는 데이터는 빨간색으로 표시한 block의 데이터를 decoder에 전송합니다. Decode

Naver Blog

(14 - 추가) 영상압축 공간 예측 - Spatial Prediction

공간 예측에 대해서 설명을 추가해보고자 합니다. 한글로 일단 설명한 것은 아래 글에 있습니다 한번 보고 이 글을 읽으시면 이해에 많이 도움 되실것 같습니다. https://blog.naver.com/jdancor/222875614355 (14) 영상압축 공간 예측 - Spatial Prediction 이전 블로그에서 DCT와 IDCT로 이미지 데이터를 주파수 영역으로 변환 하였고, 주파수 영역으로 변... blog.naver.com What is Spatial Prediction? already we process the file through discrete cosine transform function, quantization function. It's goal is data compress. Spatial prediction also compress technique. spatial prediction is compare the around pixel and process so

Naver Blog

(15) 영상압축 시공간 예측 - Spatio Temporal Prediction

이전 글에서는 Spatial Prediction 에 대해서 설명하였는데 이번 글에서는 Temporal Prediction 기능을 추가하여 설명해 보도록 하겠습니다 공간 예측은 하나의 이미지에서만 예측을 하여 압축 하는 방법이지만 시간 예측은 이전 이미지와 비교해서 예측을 하는 압축 방법입니다. 공간 + 시간 예측을 동시에 하는 것을 시공간 예측이라고 하며 Spatio - Temporal Prediction 이라고 영어로 씁니다 공간예측이 궁굼하신 분은 이전 글을 확인해 주세요 ~ https://blog.naver.com/jdancor/222875614355 (14) 영상압축 공간 예측 - Spatial Prediction 이전 블로그에서 DCT와 IDCT로 이미지 데이터를 주파수 영역으로 변환 하였고, 주파수 영역으로 변... blog.naver.com Spatio - Temporal Prediction 아래 그림에서 보면 알수 있듯이 이전 시간의 이미지 t-1를 이용하여 현재 이미

Naver Blog

simulation waveform dump 방법

Simulation의 결과인 waveform을 보기 위해서는 waveform을 dump를 받아야하고 dump 받는 방법과 형식은 tool에 따라 다릅니다. verdi와 simvision에 대해서 설명해 보고자 합니다. Verdi 와 fsdb 포멧 initial begin $fsdbDumpfile("waveform.fsdb"); $fsdbDumpvars(0, tb); $fsdbDumpvars(0, tb.a,"+mda"); $fsdbDumpvars(1, tb.b); $fsdbDumpvars(0, tb.b.c); end fsdbDumpfile : dump 하고자 하는 파일 이름을 적고 파일형식을 지정합니다. fsdbDumpvars : dump 하고자 하는 모듈의 이름을 지정합니다. 앞에 숫자는 dump의 옵션입니다. 숫자에 따른 dump 옵션 0 : 현재 모듈과 하위에 선언된 모듈 신호를 dump 1 : 현재 모듈의 신호만 dump한다 2 : 현재 모듈과 바로 아래의 instanciati

Naver Blog

(16) 색공간과 색공간 변환 YCBCR, YUV

RGB 가 Red Green Blue 라는 것을 저의 짝궁이 모르더라고요 그래서 색공간이 무엇인지에 대해 설명해 보도록 하겠습니다. RGB 색좌표계 빨강 초록 파랑의 조합으로 다양한 색을 만들 수 있고 이를 색 좌표계라고 해서 각 좌표에 따라 어떤 색상을 나타내는지 알 수 있습니다 . 색공간 (color space) 라고 하며 RGB, YCBCR, YUV, HSV, HSI 등이 있습니다. 이미지를 RGB(Red, Green, Blue)로 표현 하는 방법이 듯이 다른 색공간 YCBCR, YUV, HSV, HSI 는 색을 표현하는 하나의 수단입니다. 색공간들은 특정 수식을 통해 변환이 가능하며 색상 공간 변환(Convert Color) 이라고 합니다. 아래 수식과 같이 다양한 방식의 수식이 있으며 standard로 다양한 수식이 존재합니다. 계수가 살짝 다른 정도이며 용도에 따라 다르다고 생각하시면 됩니다. YCBCR/ YUV YUV는 아날로그 TV를 위해 사용했던 수식이라면 YCBCR

Naver Blog

(16)C언어, 색공간과 색공간 변환 YCBCR, YUV

RGB 에서 YCBCR 또는 YUV로 바꾸는 수식을 C언어로 설계해서 공유하는 시간이 왔습니다. ~~~~ 이론과 수식은 아래글을 한번더 참고해 주세요 ~ https://blog.naver.com/jdancor/222881097312 색공간과 색공간 변환 YCBCR, YUV RGB 가 Red Green Blue 라는 것을 저의 짝궁이 모르더라고요 그래서 색공간이 무엇인지에 대해 설명... blog.naver.com 다양한 수식이 있어서 다양하게 구현해 보았는데 주석 풀고 사양하시면 될것 같아요 ~ RGB -> YCBCR void rgb2ycbcr(int ** in_R,int ** in_G,int ** in_B,int ** out_Y,int ** out_CB,int ** out_CR,int hei, int wid){ //double max_cb=0, max_cr=0; //double min_cb=0, min_cr=0; double Y, CB, CR; int r,g,b; for(int i

Naver Blog

(17) 색공간과 색공간 변환 HSV, HSI, HSL

HSV/ HSL/ HSI YCbCr과 다르게 컬러를 조금더 직관적으로 표현하는 색공간입니다 YCBCR은 Cb와 Cr로 색을 선택하면서 색이라는 표현 사람눈에 직관적으로 보기 어려웠다면 HSV/ HSL/ HSI는 아래 이미지에서 보는것과 같이 조금더 보기 편하실 겁니다. HSL과 HSV의 컬러 H (Hue) : 색을 표현 0~360 의 값을 가지며 0 - red, 60 - yellow, 120 - Green, 240 - blue 와 같이 표현이 됩니다. 각도로 원으로된 공간에서 색상을 선택하게 됩니다. RGB to Hue S (Saturation) : 색상의 정도 입니다. 0 - 흰색 으로 색이 없음 , 255 - 색이 있음 RGB to Value(HSV) RGB to Value(HSL) RGB to Value(HSI) V (Value) / L (Luminance) / I(Intensity) : 색상의 밝기입니다. 0 - black, 255 - white 밝기를 나타내는 값은 아래의

Naver Blog

(17) C언어, 색공간과 색공간 변환 HSV, HSI, HS

RGB 에서 HSV바꾸는 수식을 C언어로 설계해서 공유하는 시간이 왔습니다. ~~~~ 이론과 수식은 아래글을 한번더 참고해 주세요 ~ https://blog.naver.com/jdancor/222881600118 색공간과 색공간 변환 HSV, HSI, HSL HSV/ HSL/ HSI YCbCr과 다르게 컬러를 조금더 직관적으로 표현하는 색공간입니다 YCBCR은... blog.naver.com RGB to HSV void rgb2hsv(int ** in_R,int ** in_G,int ** in_B,int ** out_H,int ** out_S,int ** out_V,int hei, int wid){ double r,g,b; double max, max_tmp; double min, min_tmp; double h; for(int i=0; i<hei;i++) for(int j=0; j<wid;j++){ r = double(in_R[i][j]); g = double(in_G[i][j])

Naver Blog

parameter, localparam, define

verilog 설계에서 parameter, localparam, define를 사용할 때가 있습니다 예제를 공유해 드리고자 합니다. module에서의 parmeter는 잘 사용하시면 코드의 reusablilty를 크게 늘릴수 있으니 참고 하시면 좋을 것 같습니다. localparam localparma <변수> = <값>; 사용시에는 변수값 그대로 사용해 주시면 됩니다. module tb(); localparam TEST1 = 1; localparam TEST2 = "image.ppm"; localparam TEST3 = 5'd8; test u_test ( .AA (TEST1), .BB (TEST2), .CC (TEST3) ); parameter parameter <변수> = <값>; 사용시에는 변수값 그대로 사용해 주시면 됩니다. module tb(); parameter TEST1 = 1; parameter TEST2 = "image.ppm"; parameter TEST3 = 5'

Naver Blog

(3) ppm 이미지를 읽고 hex로 변환 하기

ppm 데이터를 읽어서 hex 파일로 write 하는 코드를 설계해 보려고 합니다. 영상쪽으로 hardware design을 하시는 분들은 hex 로 이미지 데이터 를 밀어 넣어야 하는 환경을 꾸미는 경우가 많습니다 자기 만의 테스트 이미지를 만들고 테스트 이미지를 verilog function에서 제공해 주는 readmemh 라는 기능을 사용해서 loading을 하는 과정을 거치는데 그 때를 위해 설계한 ppm2hex 코드입니다. #!/usr/bin/python import re import sys args = sys.argv[1:] f= open(args[0],"r") data = f.read() f.close() ##========================================= ## find "#" delete and that line #data = data.split("\n") #data2 = "" #for i in range(len(data)): # d = st

Naver Blog

이미지 데이터를 전송하는 간단한 GPU 설계

Verilog 를 사용해서 이미지 데이터를 전송하는 GPU를 설계하고자 합니다. Vsync, Hsync, DE 신호를 만들고, RGB 데이터를 이미지를 통해서 읽어와 전송하는 설계입니다. module tb(); //========================================// // SYNC signal setting // //========================================// `define VRES 67 `define HRES 100 `define VFP 4 `define VACT 1 `define VBP 5 `define HFP 8 `define HACT 1 `define HBP 9 `define DATA_BIT 8 `define DATA_PORT 1 `define CLK_PERIOD 10 reg clk; initial begin clk = 0; forever #(`CLK_PERIOD/2) clk = ~clk; end reg rstn; ini

Naver Blog

verilog로 이미지를 ppm 포멧으로 dump 받기

verilog로 이미지를 ppm 포멧으로 dump 받는 코드를 공유해드리겠습니다. 이전 글에서 GPU를 통해 만든 이미지 신호를 다시 PPM 형식으로 dump 받기 위한 코드입니다. https://blog.naver.com/jdancor/222887323314 이미지 데이터를 전송하는 간단한 GPU 설계 Verilog 를 사용해서 이미지 데이터를 전송하는 GPU를 설계하고자 합니다. Vsync, Hsync, DE 신호... blog.naver.com GPU 신호의 데이터 vsync, hsync, de, RGB 데이터를 특정 연산을 통해서 값이 바뀌었다면 다시 이미지로 dump 받아서 확인해야겠죠??? 어렶지 않습니다. python과 C 언어로 ppm 파일을 만드는 방법을 공유해 드렸는데 이번에는 verilog 로 구현하는 코드만 바뀌었을 뿐입니다. 다른점은 sync 신호를 사용한다는 점 입니다. Testbench `timescale 1ns/1ps module tb(); //=====

Naver Blog

(4) python - if문, for문, while 문

코드를 작성하다 보면 조건에 따라 다른 연산 또는 일을 수행해야 합니다. if 문 조건이 참 또는 거짓 여부에 따라 처리 하는 경우 입니다. if문은 참 또는 거짓을 판단하여 코드를 수행하는 조건문 입니다. x = 1 y = 2 if x >= y: print('x가 y보다 크거나 같습니다.') else: print('x가 y보다 작습니다.') 여러개의 조건을 순차적으로 체크하기 위해서는 elif 문을 사용합니다. x = 1 y = 2 if x > y: print('x가 y보다 크거나 같습니다.') elif x < y: print('x가 y보다 작습니다.') else: print('x와 y가 같습니다.') for 문 for 문때 특정 범위의 자료나 객체에 대해 순차적으로 추출하여 특정 코드를 반복 수행하기 위해 많이 사용합니다. scope = [1, 2, 3, 4, 5] for x in scope: print(x) 1에서 5를 순차적으로 출력하고자 할때 예제 for문을 이용해 반복 작

Naver Blog

(13) python - 파일 열고 닫기 (file open, close)

파이썬은 손쉽게 파일을 열고 닫을 수 있는 기능을 지원합니다. 텍스느 파일과 바이너리(binary)파일을 둘다 열고 닫고 수정 할 수 있습니다. open과 close 함수를 사용하면 되며 file1 = open("temp.txt","r") file2 = open("iu.ppm","r") file1.close() file2.close() r 텍스트 모드로 읽기 w 텍스트 모드로 쓰기 a 텍스트 모드로 파일 마지막에 추가 하기 rb 바이너리 모드로 읽기 wb 바이너리 모드로 쓰기 ab 바이너리 모드로 파일 마지막에 추가하기 #python #파이썬 #파일 #열기 #닫기 #읽기 #쓰기 #open #close

Naver Blog

(11) python - 지역 변수와 전역 변수

지역변수는 함수 내에서만 유요한 변수 이며 verilog에서 local param 이라고 이해하면 됩니다. 전역변수는 코드 전반에 걸쳐 유요한 변수로 parameter 또는 define 정도로 이해하면 쉽습니다. 지역 변수는 함수 내부에서 선언하게 되며 전역 변수는 TOP에서 선언하게 됩니다. param = 10 strdata = '전역변수' def func1(): strdata = '지역변수' print(strdata) def func2(param): param = 1 def func3(): global param param = 50 func1() # ‘지역변수’가 출력됨 print(strdata) # ‘전역변수’가 출력됨 print(param) # 10이 출력됨 func2(param) print(param) # 10이 출력됨 func3() print(param) # 50이 출력됨 #파이썬 #python #지역변수 #전역변수 #param

Naver Blog

(12) python - 모듈 module

이미 설계한 코드를 다음 프로젝트때 또 사용할 수 있다면 매우 편리하겠죠? 코드를 작성할 때 모듈화 해서 다른 프로젝트에 다양하게 사용할 수 있도록 하는 방법에 대해 다뤄보겠습니다. 모듈이란 하나의 설계 코드들을 모두 모듈이라고 부를수 있으며 이렇게 많이 만들어 놓은 모듈을을 가져다 사용하고자 할때 모듈을 임포트(import) 하여 사용하게 됩니다. import time print('5초간 프로그램을 정지합니다.') time.sleep(5) print('5초가 지나갔습니다.') time 관련된 함수를 사용하기 위해 import time 이라는 문구를 사용하게 됩니다. calculate.py def add_fun(in1, in2) return in1+in2 def sub_fun(in1, in2) tetrun in1-in2 calculate.py 라는 파이썬 에 함수를 두개 만들어 놓았습니다. 위 함수를 사용하고자 할때 import calculate temp1 = calculate.ad

Naver Blog

(6) python - 대입 연산자, 사칙 연산자, 연산자 축약, 관계 연산자

대입 연산자 변수에 값을 대입하는데 사용하는 기호는 =(등호) 압나더 a = 1 b = 2 ret = a+b print('a와 b를 더한 값은 ', end='') print(ret, end='') print(' 입니다') =과 ==의 차이점을 아시나요? = 는 (ex, a= b) a 에 b를 대입하는 것을 의미하고 ==는 (ex, a==b) a와 b가 가다는 것을 의미 합니다. 사칙 연산자 a = 2 b = 4 ret1 = a+b # ret1 = 2+4= 6 ret2 = a - b # ret2 = 2-4= -2 ret3 = a*b # ret3 = 2*4= 8 ret4 = a/b # ret4 = 2/4= 0.5 ret5 = a**b # ret5 = 2**4= 16 ret6 = a+a*b/a # ret6 = 2+2*4/2= 6 ret7 = (a+b)*(a-b) # ret7 = (2+2)*(2-4)= -12 ret8 = a*b**a # ret8 = 2*4**2=32 사칙 연산은 덧셈, 뺼

Naver Blog

(7) python - 비트 연산자 bit operation

하드웨어 엔지니어 라면 비트 연산을 하는 경우가 많습니다. 저는 이게 필수 입니다 비트연산! 비트(bit)는 0 또는 1로 표현하는 단위입니다 8비트는 1 바이트(byte) 로 0~255 까지 표현 가능합니다. 비트 연산은 매우 기본적이고 근본적인 연산이지만 생소하죠 verilog를 사용하는 사람들에게는 파이썬을 사용할때 가장 많이 사용하게 되는 연산자들 입니다. bit1 = 0x61 bit2 = 0x62 print(hex(bit1 & bit2)) # 0x60이 출력됨 print(hex(bit1 | bit2)) # 0x63이 출력됨 print(hex(bit1 ^ bit2)) # 0x3 이 출력됨 print(hex(bit1 >> 1)) # 0x30이 출력됨 print(hex(bit1 << 2)) # 0x184가 출력됨 비트 연산자 의미 A & B A와 B 비트간의 and 연산을 수행 A | B A와 B 비트간의 or 연산을 수행 A ^ B A와 B 비트간의 exclusive or 연산

Naver Blog

(7) python - 시퀀스 자료형 인덱싱, 슬라이싱, 연결, 반복, 맴버체크, 크기정보

시퀀스 자료형 이란 객체가 순서를 가지고 나열되 있는 변수들 의미 합니다. 시퀀스 자료형에는 문자열, 리스트, 튜블 이 있습니다. str_data = "abcde" #문자열 시퀀스 자료형 list_data = [1,2,3,"hi"] #리스트 시퀀스 자료형 tuple_data = (5,6,7,8) #튜플 시퀀스 자료형 인덱싱 인덱스를 통해 해당 값에 접근 가능, 인덱스는 0 부터 시작 슬라이싱 특정 구간의 값을 취득 가능, 구간은 시작 인덱스와 끝 인덱스로 정의 연결 '+' 연산자를 이용 두 시퀀스 자료를 연결 할 수 있다 반복 '*' 연산자를 이용 시퀀스 자료를 여러번 반복 할 수 있다. 맴버체크 'in' 키워드르 랏용해서 특정 값이 시퀀스 중에 포함 되는지 확인 가능하다 크기정보 len() 을 이용해서 자료의 크기를 알 수 있다. 인덱싱 indexing strdata = 'Time is money!!' listdata = [1, 2, [1, 2, 3]] print(strdata[5

Naver Blog

(8) python - 문자열 포멧팅, 이스케이프 문자

문자열 포메팅은 변수를 포함해서 문자열을 표시하기 위해 하나의 문자열로 포멧을 통일해 바꾸는 것을 말합니다. txt1 = '자바';txt2='파이썬' num1= 5; num2=10 print('나는 %s보다 %s에 더 익숙합니다.' %(txt1, txt2)) print('%s은 %s보다 %d배 더 쉽습니다.' %(txt2, txt1, num1)) print('%d + %d = %d' %(num1, num2, num1+num2)) print('작년 세계 경제 성장률은 전년에 비해 %d%% 포인트 증가했다.' %num1) 변수들을 문자 포맷을 사용해서 표현하고 %s 문자열에 대응 %c 문자나 기호 한개의 대응 %f 실수에 대응 %ㅇ wjdtndp eodmd %% %라는 기호를 를 표현 from time import sleep for i in range(100): msg = '\r진행률 %d%%' %(100-i-1) print(' '*len(msg), end='') print(msg, e

Naver Blog

(9) python - 리스트, 튜플, 사전

리스트 -list 리스트는 가장 많이 사용 되는 시퀀스 자료형 중 하나입니다. 리스트는 []로 표시하고 , (콤마)로 구분 합니다. list1 = [1, 2, 3, 4, 5] list2 = ['a', 'b', 'c'] list3 = [1, 'a', 'abc', [1, 2, 3, 4, 5], ['a', 'b', 'c']] list1[0] = 6 print(list1) # [6, 2, 3, 4, 5]가 출력됨 def myfunc(): print('안녕하세요') list4 = [1, 2, myfunc] list4[2]() # ‘안녕하세요’ 가 출력됨 튜플 - tuple 튜플은 리스트와 비슷하지만 요소의 값을 변경 할 수 없습니다. tuple1 = (1, 2, 3, 4, 5) tuple2 = ('a', 'b', 'c') tuple3 = (1, 'a', 'abc', [1, 2, 3, 4, 5], ['a', 'b', 'c']) #tuple1[0] = 6 def myfunc(): print('안

Naver Blog

(10) python - 함수와 def 사용법

함수는 특정 목적을 가진 코드의 집합이며 독립적으로 호출하여 사용할 수있습니다 다양한 함수를 만들어 놓으면 편리하게 가져다 사용할 수있죠~!! def add_number(n1, n2): ret = n1+n2 return ret def add_txt(t1, t2): print(t1+t2) ans = add_number(10, 15) print(ans) # 25가 출력됨 text1 = '대한민국~' text2 ='만세!!' add_txt(text1, text2) # ‘대한민국~만세!!’가 출력됨 인자와 리턴값이 있는 함수 선언 방법 def 함수이름(입력1, 입력2, ... ): 수행 코드 return 수행코드 결과값 리턴값은 있지만 인자가 없는 함수 선언 방법 def 함수이름(): 수행 코드 return 수행코드 결과값 인자와 리턴값이 없는 함수 선언 방법 def 함수이름(): 수행 코드 return (생략) 인자와 리턴값이 있는 함수 호출 방법 변수 = 함수이름 (입력, 입력2, ..

Naver Blog

(5) python - 정수형, 실수형, 복소수형

정수형 자료 프로그래밍에서 보통 10진수 상수를 정수형으로 취급하는데 2진수 8진수 16 진수를 사용하는 경우도 많습니다. 표현방법 2진수는 0b 8진수는 0o 16진수는 0x 일반적으로 정수형의 범위는 -2147483647 ~ 2147483647 을 가지지만 파이썬은 최대 최소는 없고 메모리가 혀용하는 범위에서 지원가능한 수를 사용가능합니다. int_data = 10 bin_data = 0b10 oct_data = 0o10 hex_data = 0x10 long_data = 1234567890123456789 print(int_data) print(bin_data) print(oct_data) print(hex_data) print(long_data) 실수형 자료 f1 = 1.0 f2 = 3.14 f3 = 1.56e3 f4 = -0.7e-4 print(f1) print(f2) print(f3) print(f4) 벼눗에 소수로 표현하면 실수형 자료로 취급합니다. f4 = -0.7x10

1 2 3 4 5 6 7 8