BLoC(Business Logic Component) BLoC(Business Logic Component)란 UI와 Business Logic을 분리하여 만드는 방식을 의미한다. BLoC는 Flutter의 state를 관리하는 디자인 패턴 중 하나이며 Google 개발자에 의해 고안되었다. Flutter는 state에 따라 렌더링이 일어나기 때문에, 상태 관리가 매우 중요하다. 또한 상태 관리는 Flutter에서 만의 문제가 아닌 모든 개발에서 중요하게 고려되어야 할 사항이다. 그러므로 이 BLoC Pattern은 Flutter를 위해 설계되었지만 다른 프레임워크나 언어에서도 적용 가능한 디자인 패턴이다. 예를 들어 React Native에서 setState라는 Hook을 이용해 상태를 갱신시키며 r..
Flip 이미지 상하, 좌우 반전을 위해 Affine 변환 또는 remapping을 이용하는 방법이 있지만 간단하게 OpenCV의 flip 함수를 이용할 수 있다. 아래는 해당 python 소스 코드이다. import cv2 import numpy as np def FlipImage(img, type): ''' :param mode: 1은 좌우 반전, 0은 상하 반전, -1은 상하 좌우 반전 ''' result = cv2.flip(img, type) return result img = cv2.imread('brokenEgg.jpeg') updown = FlipImage(img, type=0) bilateral = FlipImage(img, type=1) both = FlipImage(img, type=-..
리매핑(Remapping) 리매핑(Remapping)을 이용해 이미지를 직선이 아닌 곡선으로 표현할 수 있는데, 입력 이미지에 기하학적(Geometric) 변환을 적용하는 방법이라고 볼 수 있다. 이를 통해 좀 더 자유도 있는 변환을 수행할 수 있다. 리매핑은 이미지에 변환 행렬 연산을 적용하는 것이 아닌, 비선형 변환을 적용할 수 있다. 즉, 리매핑이란 규칙성 없이 마음대로 이미지의 모양을 변환하는 것을 말한다. 어파인 변환, 투시 변환을 포함한 다양한 변환을 리매핑으로 표현할 수 있다. 오른쪽 수식은 대칭 변환을 리매핑으로 표현한 것이고, 대칭 변환은 x좌표를 (가로크기 -1 -x)로 매핑하였고 y좌표는 그대로 가져온다. x가 0이면 w-1이 되어 가로 끝 좌표를 참조합니다. 따라서 좌우 대칭이 된다..
투시변환(Perspective Transform) 영상의 기하학적 변환 중 어파인 변환(Affine Transform)보다 자유도가 높은 투시변환(Perspective Transform)이 있다. 따라서 투시변환은 직사각형 뿐만 아니라 사다리꼴 혹은 다른 형태의 임의의 사각형으로 표현이 가능하다. 어파인 변환은 우선 원본 이미지에 3개의 점을 정하고, 이 3개 점을 기준으로 얼마나 뒤틀리게 할것인지 정한다. 반면 투시 변환은 이미지의 끝 점 4개의 이전위치와 변환 후의 위치를 알면 이동 관계를 알 수 있는데 이는 평행 사변형이 아닌 좀 더 자유로운 사각형이기 때문이다. 투시 변환은 보통 3×3 크기의 실수 행렬로 표현한다. 투시 변환은 여덟 개의 파라미터로 표현할 수 있지만, 좌표 계산의 편의상 아홉 개..
주요 개념 BLE RSSI(Received Signal Strength Indicator) RSSI(Received Signal Strength Indicator) 방식은 실내 위치 측위를 위한 가장 간단한 방법으로 많이 사용되는 위치 측위 방법 중에 하나이며, RSS는 수신기에서 수신되는 실제 신호 전력 강도이며 일반적으로 데시벨-밀리와트(dBm) 또는 밀리와트(mW) 단위로 측정된다. 이 용어는 Bluetooth에서만 쓰이는 단어는 아니고 RF 신호를 사용하는 모든 시스템에서 사용되고 있는데, LTE 모뎀과 같은 통신 모듈에서도 RSSI라는 단어를 사용한다. RSSI값은 송신기(Tx)와 수신기(Rx) 장치 사이의 거리를 추정하는 데 사용할 수 있다. RSS 값이 높을수록 Tx와 Rx 사이의 거리가 ..
이미지에서 전처리를 해주거나 딥러닝 모델에 학습시키기 위해 ROI(Region Of Interest)라는 관심영역 설정이 필요하다. 이는 이미지에서 좌표로 직접 지정해주거나 selectROI 또는 selectROIs라는 OpenCV의 함수를 사용하여 쉽게 추출할 수 있다. 좌표 지정 좌표 지정은 roi = image[y:y+h, x:x+w]와 같이 작성해주면 된다. import cv2 img = cv2.imread('brokenEgg.jpeg') x = 232 w = 231 y = 310 h = 182 roi = img[y:y+h, x:x+w] color = (0, 255, 0) thickness = 5 cv2.rectangle(img=roi, pt1=(0, 0), pt2=(w, h), color=col..