본문 바로가기

AI/컴퓨터 비전25

Computer Vision_개념을 다시한번 잡기 위한 글 1. 컴퓨터 비전컴퓨터 비전은 인공지능(AI)의 한 분야로, 컴퓨터가 인간처럼 이미지나 영상을 이해하고 분석할 수 있도록 하는 기술입니다. 이는 객체 검출, 이미지 분류, 얼굴 인식, 장면 이해 등 다양한 작업을 포함하며, 주로 머신러닝과 딥러닝을 활용하여 이미지 속 특징을 추출하고 패턴을 학습합니다. 예를 들어, 자율주행 자동차는 컴퓨터 비전을 사용하여 도로의 차선, 보행자, 신호등을 인식하며, 의료 영상 분석에서는 CT나 MRI 이미지를 분석하여 질병을 진단할 수 있습니다. 최근에는 합성곱 신경망(CNN)과 같은 딥러닝 모델이 발전하면서 컴퓨터 비전의 성능이 크게 향상되었으며, 다양한 산업에서 활발히 활용되고 있습니다. 2. 컴퓨터 비전에서의 프레임워크컴퓨터 비전에서 주로 사용하는 프레임워크로는 Op.. 2025. 3. 6.
[컴퓨터 비전] YOLO로 폐 질환 환자 구별하기 더보기사용 데이터셋:https://www.kaggle.com/datasets/adityamahimkar/iqothnccd-lung-cancer-datasetyolo를 배웠기때문에 YOLO로 폐질환 환자를 구별해보려고 합니다.KAGGEL데이터를 가져올것이기때문에 KAGGEL을 가지고 옵니다.(API)#캐글 데이터셋 다운로드!kaggle datasets download -d hamdallak/the-iqothnccd-lung-cancer-dataset# 압축 풀기!unzip -q /content/the-iqothnccd-lung-cancer-dataset.zip압축을 풀게되먄  The IQ-OTHNCCD lung cancer dataset 가 생성됨 [ Begin - 시작되는단계, Malignat - 폐암,.. 2025. 1. 28.
[DL] 모폴로지 처리, 도형이미지 구분하기 4. 모폴로지 처리- 영상의 밝은 영역이나 어두운 영역을 축소 또는 확대하는 기법을 말합니다.    cv2.getStructuringElement(구조 요소의 모양, 사이즈)    구조 요소의 모양    * 직사각형(cv2.MORPH_RECT)        - 단순한 형태로 모든 요소가 같은 값을 가지는 정사각형 또는 직사각형        - 팽창과 침식 연산에서 동일하게 작동        - 객체 가장자리를 따라 명확한 변화를 줄 때 유용     * 타원형(cv2.MORPH_ELLIPSE)        - 가장자리 부분을 더 부드럽게 처리        - 객체의 둥근 모양을유지하면서 노이즈를 제거할 때 유용    * 십자형(cv2.MORPH_CROSS) / 많이 사용하지는 않음        - 중심을 .. 2024. 10. 8.
[DL] 엣지검출(Canny) , 필터캠 엣지(edge) 검출- 물체의 윤곽선(경계선)이 해당- 영상에서 화소의 밝기가 급격하게 변하는 부분- 에지를 검출할 수 있으면 물체의 윤곽선을 알 수 있음- "케니 에지 검출"은 상당한 수준으로 에지를 신뢰성 있게 검출하는 방법    cv2.Canny(영상, 최소임계값, 최대임계값, 커널)    최소임계값, 최대임계갑:두개의 경계값(max, min)을 지정해서 경계에 있는 영역 픽셀을 찾음.import cv2import numpy as npimg = cv2.imread('./dog.jpg')med_val = np.median(img)lower = int(max(0, 0.7*med_val)) #95 #중앙값의 70%upper = int(min(255, 1.3 * med_val)) #176 #중앙값의 130.. 2024. 10. 7.
[DL] 투시변환(persective), 명함을 이용한 사진 활용 투시변환(persective)- 직사각형 형태의 영상을 임의의 입체감 있는 사각형 형태로 변환- 원본 영상에 있는 직선은 결과 영상에서 그대로 유지되지않고 평행 관계가 깨질 수 있음- 투시 변환은 보통 3*3 실수 행렬로 표현     cv2.getPerspectiveTransform(영상, 4개의 결과 좌표점) -> 투시;변환 행렬 만들어짐     cv2.warpPerspectibe(영상, 투시변환행렬, 결과영상크기)예제로는 살짝 누워있는 이미지를 이용해서 그 이미지만 펴서 내가 변환할 사이즈에 맞춰서 변환해주는 예제를 활용했습니다.import cv2import numpy as npimg = cv2.imread('./pic.jpg')#변환할 크기를 설정한것w,h = 300,200#꼭지점 좌표#순서 : 왼.. 2024. 10. 6.
[DL] 영상의 변환(이동), resize # 영상의 변환- 구성하는 픽셀의 배치 구조를 변경함으로 전체 영상의 모양을 바꾸는 작업이미지 이동(translate)하는 방법 애니메이션처럼이동하는것이 아니라 위치에서 살짝 이동하는 방식을 이야기함! 이미지를 이동할때는 변환행렬을 사용합니다. 변환행렬의 형태         [결과]     M = | 1 0 a |     x방향으로 a만큼           | 0 1 b |        y방향으로 b만큼 실행시켜주는 함수 :  cv2.warpaffine(영상, affine행렬, (0,0))(0,0)을 넣으면 입력 영상과 크기가 같은(=똑같은) 행렬을 반환합니다. 이 함수를 사용하게되면 변환행렬을 가지고 영상에 적용시켜주는 함수입니다. 예제는 아래와 같습니다.이 사진을 사용할겁니다. import cv2im.. 2024. 10. 5.
[DL] 적응형이진화(cv2.adaptiveThreshold())+자동이진화 적응형, 가우시안 비교 #adaptive 5. 적응형 이진화- 영상을 여러 영역으로 나눈 뒤, 그 주변 픽셀 값만 활용하여 임계값을 구함- cv2.adaptiveThreshold()    cv2.ADAPTIVE_THRESH_MEAN_C    -이웃 픽셀의 평균으로 결정    - 선명하지만 잡티가 많아질 가능성이 있음    - 문서 스캔과 같이 이미지가 고르게 조명된 경우에 효과적   cv2.ADAPTIVE_THRESH_GAUSSIAN_C   - 가우시안 분포에 따른 가중치의 합으로 결정   - 선명도는 조금 떨어지지만 잡티가 적음   - 조명이 불균일한 이미지나 디테일을 유지하고자 할 때 효과적import cv2import matplotlib.pyplot as pltimg = cv2.imread('./sudoku.jpg', c.. 2024. 10. 4.
[DL] 오츠의 이진화(스레숄드값을 자동으로 잡아주기) 이번에는 오츠의 이진화를 통해서 쓰레숄드값을 자동으로 잡아주려고합니다.이전예제인 이진화에서는 직접 100,150,200 등 찾아주었는데 이번같은경우는 오츠의 이진화를 통해서 자동으로 임계값을 구하게 만들어주려고합니다. 사용할 이미지는 위와 같습니다(rice)쌀. ## otus3. 오츠의 이진화 알고리즘( 오츠의이진화 = 자동 이진화를 하고싶을 때 사용하는 알고리즘)- 자동 이진화 알고리즘- 자동으로 임계값을 구해줌 (임계값을 구분하는 가장 좋은 방법으로 찾아줌)- cv2.threshold(영상, 임계값(암거나 넣어도 됨 0넣어도됨), 최대값, 플래그|cv2.THRESH_OTSH)- 임계값을 임의로 정해 픽셀을 두 부류로 나누고 두 부류의 명암 분포를 구하는 작업을 반복하여 모든 경우의 수 중에서 두 부류.. 2024. 10. 3.
[DL]영상의 이진화(Binarization) 2. 영상의 이진화(Binarization)- 픽셀을 검은색 또는 흰색과 같이 두 분류의 값으로 나누는 작업- 영상에서 의미있는 관심 영역(ROI)과 비관심 영역으로 구분할 때 사용- 예) 배경과 객체를 둘로 나눌 때- 영상의 이진화 연산을 할 때 나누는 특정값을 임계값이라고 함- cv2.threshold(영상, 임계값, 최대값, 플래그) 플래그 cv2.THRESH_BINARY: 픽셀값이 임계값을 넘으면 최대값으로 지정하고 넘지 못하면 0으로 지정 예) 픽셀값 150, 임계값 120: 픽셀값은 255로 설정 cv2.THRESH_BINARY_INV: cv2.THRESH_BINARY의 반대이번에는 영상의 이진화를 해보는 작업을 하려고 합니다.사용할 사진은 아래와 같습니다.## binar.. 2024. 10. 2.
[DL] 마스크 연산_cv2.copyTo(), 동영상 합성 6. 마스크 연산 (누끼따기)- 마스크 연산을 지원하는 픽셀 값 복사 함수- cv2.copyTo(img, mask)img와 mask를 넣어서 객체를 만들어줍니다.위 이미지들을 활용하여 배경에 비행기가 copy되는 마스크연산을 해보려고 합니다. mask는 **0인 부분은 "무시"**되고, **0이 아닌 부분은 "복사"**되는 거예요. 그림으로 비유:마스크를 투명 종이라고 생각할 수 있어요. 종이에서 투명한 부분(=마스크가 0인 부분)은 복사되지 않고, 불투명한 부분(=마스크가 0이 아닌 부분)은 복사됩니다. 위의 마스크 사진에서는 검은색 부분이 0인 부분입니다.즉, 이 부분은 마스크에서 복사되지 않는 영역을 나타냅니다.흰색 부분이 0이 아닌 부분입니다.마스크에서 복사되는 영역을 나타냅니다.검은색(배경) 부.. 2024. 10. 1.
[DL] cv2.inRange_hsv 색상추출 5. 색상 추출- 영상에서 지정된 범위 안에 픽셀을 선택- cv2.inRange(hsv, (최소값) (최대값))BGR에서 녹색계열0  import cv2img = cv2.imread('./candies.png')hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)'''HSV에서의 녹색계열#색상50 이렇게 녹색계열만 잘 뽑아오는것을 확인할 수 있습니다. 물론 노이즈는 조금 있는편입니다., 2024. 9. 30.
[DL] 정규화 4.정규화(normalization)- 특정 영역에 값이 몰려있는 경우 화질을 개선하고,이미지 간의 연산 시 서로 조건이 다른경우 같은 조건으로 변경- cv2.normalize() cv2.NORM_MINMAX: 최소값과 최대값을 0 ~ 255로 변경(가장 많이 사용됨) cv2.NORM_L1: 전체 합으로 나누어 정규화 cv2.NORM_L2: 단위 벡터로 정규화(제곱합의 루트로 나누어 정규화) cv2.NORM_INF: 최대값으로 나누어 정규화정규화를 하는 이유는 서로 조건을 다른걸 같은조건으로 만들어주고 비교할 수 있게 만드는 작업입니다.import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('./Hawke.. 2024. 9. 29.
[DL] 균등화, 평탄화단점보완 CLAHE(이미지, 영상 품질관련)(3) 3. CLAHE(클라히)(Contrast Limited Adaptive Histogram Equalization)- 평탄화를 하면 이미지의 밝은 부분이 날라가는 현상이 생길 수 있음- 이미지의 일정한 영역을 나누어 평탄화를 적용- 객체 = cv2.createCLAHE() => 객체.apply(영상)평탄화 작업을 하게되면 단점이 이미 밝은사진같은경우에는  이미지가 날라가는 현상이 생길 수 있어서이미지의 일정한 영역을 나누어서 평탄화를 적용하게 됩니다.- 객체 = cv2.createCLAHE() => 객체.apply(영상)를 사용합니다. #히스토그램에서 특정 픽셀 값이 지나치게 많이 분포되어 있을 때 이를 제한하여과도한 대비가 생기지 않도록 합니다(1~4, 클수록 강한 대비)# tileGridSize: 블록.. 2024. 9. 28.
[DL] 균등화, 평탄화 등 이미지 변환 활용(이미지, 영상 품질관련)(2) 이번에 사용할 이미지는위 사진과 같습니다.  결과물은  import cv2img= cv2.imread('./field.bmp')'''2.색공간YCbCr(Y는 고정, Cb, Cr은 순서 변경가능)- 색 공간을 밝기 정보로 표현하는 방식- Y: 밝기 정보 / 나머지 cb, cr가지고 색상을 조합하는 구조임HSV- 색을 표현하는 방법이자 색을 배치하는 방식- H(색상, 빨강녹색파랑) , S(채도, 선명도), V(명도, 빛의 밝기)의 좌표를색으로 지정'''ycrcb = []dst = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)ycrcb = cv2.split(dst) #y=0, cr=1, cb=2#결과가 튜플형태로나오기때문에 못바꾸니까 리스트로 변환해주는 작업ycrcb = list(ycr.. 2024. 9. 27.
[DL] 균등화, 평탄화 등 이미지 변환 활용(이미지, 영상 품질관련)(1) 이미지와 영상을 받게되고 이 부분에 대해서 영상처리를 하려면 잘 보이게끔, 활용할 수 있도록 전처리를 해야합니다.그래서 open cv2에 있는 함수들을 사용할 수 있습니다.이번에는 뿌연사진을 참고해서 좀색이 진하고 뚜렷하게 볼 수 있도록 만들어보려고합니다.균등화, 평탄화(Equalization)- 히스토그램을 활용하여 이미지의 품질을 개선하기 위한 방법- 화소값을 0 ~ 255 사이에 고르게 분포하도록 개선- 사용되는 함수: cv2.equalizeHist()2.색공간YCbCr,- 색 공간을 밝기 정보로 표현하는 방식- Y: 밝기 정보HSV- 색을 표현하는 방법이자 색을 배치하는 방식- H(색상, 빨강녹색파랑) , S(채도, 선명도), V(명도, 빛의 밝기)의 좌표를색으로 지정3. CLAHE(클라히)(Co.. 2024. 9. 27.
[DL] YOLO의 흐름 확인하기 좋은 복습 글 1. 객체탐지(Object Detection)컴퓨터 비전과 이미지 처리와 관련된 컴퓨터 기술로서, 디지털 이미지와 비디오로 특정한 계열의 시멘틱 객체 인스턴스를 감지하는 일예시) 보행자 검출, 동물, 사물 검출 등이 포함되는 일박스로 탐지하는 역할입니다 큰 박스로 객체를 탐색하는것!!!  2. 컴퓨터 비전의 Task 비교Image classfication: 이미지(영상)에 있는 객체 범주 목록 생성- 더러운방VS깔끔한 방, 산타VS일반인Single-Object Localization: 이미지에 있는 객체 범주의 한 인스턴스의 위치와 배율을 나타내는 Bounding Box를 생성하는 일- 하나의 오브젝트가 어디에 존재하는지? 위치를 찾아주고 검출해주는것Object Detection: 각 객체 범주의 모든 .. 2024. 9. 27.
[DL] 케글을 활용한 강아지 품종 분류 지금까지는 1개 VS 2개 를 이용해서 문제를 풀었다면지금은 강아지 품종 분류를 여러개를 해볼 수 있습니다.!pip install timmimport osimport randomimport shutilimport matplotlib.pyplot as pltimport globimport torchimport torchvisionimport torch.nn.functional as Fimport timmimport torch.nn as nnimport torch.optim as optimfrom torchvision import datasets, models, transformsfrom PIL import Imagefrom tempfile import TemporaryDirectoryfrom time im.. 2024. 9. 24.
[DL] VGG19를 활용한 균열 VS 정상 벽 분류해보기 VGG19를 활용한 균열VS정상 벽 분류해보려고 합니다. 먼저 필요한 라이브러리를 임포트 해주도록 하겠습니다.import osimport globimport matplotlib.pyplot as pltimport torchimport torch.nn as nnimport torch.optim as optimimport torchvision.transforms as transformsimport torchvision.models as modelsimport numpy as npfrom torch.utils.data import DataLoader, Dataset, SubsetRandomSamplerfrom torchvision.datasets import ImageFolderfrom PIL import I.. 2024. 9. 20.
[DL] VGG19을 이용한 산타VS일반인 분류해보기 import osimport globimport matplotlib.pyplot as pltimport torchimport torch.nn as nnimport torch.optim as optimimport torchvision.transforms as transformsimport torchvision.models as modelsimport numpy as npfrom torch.utils.data import DataLoader, Dataset, SubsetRandomSamplerfrom torchvision.datasets import ImageFolderfrom PIL import Imagedata_root = '/content/drive/MyDrive/경로'device = torch.dev.. 2024. 9. 10.
[DL] AlexNet을 활용한 안경착용 vs 안경 미착용 구분/완료 이번에는 알렉스넷을 활용해서 안경착용, 미착용을 구분하려고합니다.받은 이미지를 보면 사진 위에 글씨가 있었는데 그 부분을 하나하나 자를수있겠지만 양이 많을때는 사실상 그러기 너무 힘드니까 크롭하는 코드까지 추가해서 예제를 진행해보려고 합니다. import osimport globimport matplotlib.pyplot as pltimport torchimport torch.nn as nnimport torch.optim as optimimport torchvision.transforms as transformsimport torchvision.models as modelsfrom torch.utils.data import DataLoader, Datasetfrom torchvision.datasets.. 2024. 9. 8.
[DL] AlexNet을 활용한 <깔끔한 방 VS 지저분한 방> 분류하기 [DL] 컴퓨터 비전 데이터셋 활용링크 (tistory.com)를 이용해서 데이터셋을 활용할 수 있지만 AlexNet을 이용하면 연습해보고 공부하기 좋은 데이터셋을 이용해서 프로젝트를 해보려고 합니다. 각 train, test, validation 데이터들을 강사님이 주셨고, 파일을 나눠서 작업을 했습니다.AlexNet자체로는 전이학습이 가능하니 다음으로 덧데어서 받은 데이터로 예측을 해보려고 합니다. 필요한 라이브러리 임포트import osimport globimport matplotlib.pyplot as pltimport torchimport torch.nn as nnimport torch.optim as optimimport torchvision.transforms as transformsimpo.. 2024. 8. 26.
[DL] 컴퓨터 비전 데이터셋 활용링크 1. 컴퓨터 비전인공지능(AI)의 한 분야로, 컴퓨터와 시스템을 통해 디지털 이미지, 비디오 및 기타 시각적 입력에서 의미 있는 정보를 추출한 다음에 이러한 정보를 바탕으로 작업을 실행하고 추천할 수 있게 하는 것AI -> 생각컴퓨터 비전 -> 보기, 관찰 2. 컴퓨터 비전과 데이터셋컴퓨터 비전의 모델은 데이터의 모음(일반적으로 이미지, 비디오, 시각적 정보)을 학습데이터셋은 모델의 성능을 결정하는데 중요(양이 많아야하고, 품질이 좋아야 합니다) -> 데이터셋의 크기는 모델이 학습 중에 본 예제의 수를 나타내기 때문입니다.데이터셋의 품질은 주석이 잘 못 지정되거나, 레이블이 잘 못 저장된 경우 모델의 성능에 부정적 영향을 줄 수 있음다양한 객체 변형의 존재, 조명 조건, 배경 등을 포함한 데이터셋의 다양.. 2024. 8. 25.
[DL] open cv2 필터(블러링, 평균, 가우시안, 미디언, 바이레터럴) 1. 블러링(blurring) - 초점이 맞지 않은 듯 영상을 흐릿하게 하는 작업- 평균 블러링 : 일반적인 블러링 방법. 균일한 값을 정규화된 커널을 이용한 이미지 블러링 방법- 가우시안 블러링 : 가우시안 분포를 갖는 커널로 블러링 하는 방법특징1. 대상 픽셀에 가까울수록 많은 영향을 주고, 멀어질수록 적은 영향을 주기때문에 원래의 영상과 비슷하면서도 노이즈를 제거하는 효과가 있음 - 미디언 블러링 : 커널의 픽셀 값 중 중앙값을 선택 픽셀을 정렬하는 방법 소금-후추 잡음 제거하는 효과 - 바이레터럴 필터 블러링 : 기존 블러링의 문제점을 해결하기 위한 방법. 일반적인 블러링은 잡음을 제거하는 효과는 뛰어났지만 해당 잡음의 경계도 흐릿하게 만드는 문제가 발생. 경계도 뚜렷하고 노이즈도 제거되는 효과가.. 2024. 8. 24.
[DL] ROI함수 활용하여 마우스 클릭 이벤트 구현하기 /완료 1. 관심 영역(ROI, Region of Interest)- 영상 내에서 관심이 있는 영역 cv2 모듈을 이용해서 이미지를 확인하고 이미지를 확인하여서 태양부분의 이미지만! 스퀘어 처리를 하고 그 옆으로 카피를 해보려고 합니다.ROI 는 관심영역 이라고 생각하면 되고 내가 액션을 취할 부분(구간)이라고 이해하면 좋을것같습니다. 이번 시간에는중에서 태양만 옆으로 하나 더 복사하고 , 2개의 태양을 테두리 치는것을 해보았습니다.import cv2img = cv2.imread('./sun.jpg')# x, y, w, hx = 182y = 21w = 120h = 110# 태양을 복사roi = img[y: y+h, x: x+w]roi_copy = roi.copy()img[y: y+h, x+w: x+w+w] = .. 2024. 8. 22.
[DL] 영상이어붙이기, 키이벤트, 사진 효과(add,blending...) 영상 2개를 이어붙였습니다.import cv2import syscap1 = cv2.VideoCapture('./sea.mp4')cap2 = cv2.VideoCapture('./213026_tiny.mp4')w = round(cap1.get(cv2.CAP_PROP_FRAME_WIDTH))h = round(cap1.get(cv2.CAP_PROP_FRAME_HEIGHT))frame_cnt1 = round(cap1.get(cv2.CAP_PROP_FRAME_COUNT))frame_cnt2 = round(cap2.get(cv2.CAP_PROP_FRAME_COUNT))fps1 = cap1.get(cv2.CAP_PROP_FPS)fps2 = cap2.get(cv2.CAP_PROP_FPS)# print(w)# print(.. 2024. 8. 9.