이 기사는 데이터 과학 Blogathon
개요
이미지 안에 숨겨진 많은 정보가 있을 수 있고 우리는 그것을 다양한 방식과 관점으로 해석할 수 있습니다. 그렇다면 이미지란 무엇이며 이미지를 처리하는 방법은 무엇입니까? 간단히 말해서 이미지는 무언가의 시각적 표현이며 컴퓨터 비전을 사용하여 쉽게 처리할 수 있다고 말할 수 있습니다(머신 러닝 관점에서). 동영상은 어떻습니까? 비디오는 일련의 움직이는 이미지 또는 연속 프레임의 기록으로 설명될 수 있습니다. 하지만 우리는 다른 블로그에서 컴퓨터 비전을 사용하여 비디오를 다룰 수 있습니다! 🙂
지금쯤이면 이미 Computer Vision에 대해 알고 계시는 분들도 계시고 이 단락은 건너뛸 수 있겠지만, 잘 모르시는 분들을 위해 Computer Vision은 주로 'CV'의 축약형으로 알려져 있으며, 의료, 자동차, 제조업, 농업 등 현대 시대의 거의 모든 영역에서 유용한 정보를 추출하는 인공지능
이미지 1
현재 이 포스트를 읽고 있는 인간으로서 당신은 이미지에 존재하는 사물이나 요소를 구별할 수 있을 것입니다. 그러나 기계는 어떻습니까? 그들은 스스로 그것을 구별하기 위해 보고 생각할 수 있었습니까? 아니요? 그럼 당신의 기계가 그것을 하도록 합시다.
이 블로그에서는 파이썬을 사용하여 컴퓨터 비전의 기초에 익숙해질 것입니다.
Python으로 프로그래밍하기 위해 Python Shell/Jupyter Notebook/PyCharm 또는 Visual Studio Code(몇 가지 예)를 이미 설치했다고 생각합니다. 널리 사용되는 패키지(OpenCV)를 설치하여 시작하고 Jupyter Notebook의 각 셀에서 코드를 실행하겠습니다.
이미지 전처리를 위한 OpenCV 패키지 설치
OpenCV는 컴퓨터 비전, 기계 학습 및 이미지 처리 응용 프로그램에 널리 사용되는 사전 구축된 오픈 소스 CPU 전용 라이브러리(패키지)입니다. Python을 비롯한 다양한 프로그래밍 언어를 지원합니다.
다음을 사용하여 OpenCV 패키지를 설치합니다.
pip 설치 opencv-python
OR
pip는 opencv-contrib-python을 설치합니다.
터미널에서 이러한 명령 중 하나를 실행하거나 Anaconda Navigator – Jupyter Notebook을 사용하는 경우 "conda" 명령으로 "pip"를 변경하고 동일하게 설치할 수 있습니다.
패키지 가져오기
파이썬에서 패키지란? Python의 패키지는 미리 작성된 스크립트를 포함하는 모듈 모음입니다. 이 패키지는 모듈을 완전히 또는 개별적으로 가져오는 데 도움이 됩니다. 다음과 같이 "cv2" 모듈을 호출하여 패키지를 가져올 수 있습니다.
cv2 가져 오기
이미지 읽기
디지털 이미지는 다음과 같이 분류할 수 있습니다. 컬러 이미지, 그레이 스케일 이미지, 이진 이미지 및 다중 스펙트럼 이미지. 컬러 이미지는 각 픽셀에 대한 컬러 정보를 포함합니다. 유일한 색상으로 회색 음영이 있는 이미지는 회색조 이미지인 반면 이진 이미지는 정확히 두 가지 색상(대부분 흑백 픽셀)을 갖습니다. 다중 스펙트럼 이미지는 특정 파장 내에서 전자기 스펙트럼 범위의 이미지 데이터를 캡처하는 이미지입니다.
코딩 부분으로 돌아가서 이미지를 읽어 보겠습니다. 예를 들어 이미지는 아래와 같습니다.
맨드릴의 이미지입니다. 현재 로컬 디렉토리에서 이미지를 읽고 있습니다.
# cv2.imread(path_to_image_with_file_extension, 플래그)
사용 코드는 다음과 같습니다.
img = cv2.imread("만드릴.jpg", 1)
여기에서 우리는 이미지를 읽기 위해 cv2 패키지의 "imread" 메소드를 사용하고 있으며 첫 번째 매개변수는 파일 이름과 확장자가 있는 이미지의 경로에 해당하고 두 번째 매개변수는 설정할 수 있는 플래그입니다. 이미지를 읽는 방법. 원하는 경우 여기에서 이미지의 절대 경로를 바꾸고 로컬 컴퓨터나 인터넷에서 읽어볼 수 있습니다! 이미지가 현재 작업 디렉토리에 있는 경우 확장 유형과 함께 이미지 이름만 지정하면 됩니다.
두 번째 매개변수와 관련하여 회색조 이미지로 읽으려면 매개변수를 0, -1로 지정하여 이미지를 변경하지 않은 것으로 읽을 수 있습니다(이미지가 있는 경우 알파 또는 투명 채널로 이미지를 읽음). 기본적으로 컬러 이미지로 1입니다. 이 링크에서 다른 매개변수를 시도할 수도 있습니다.
https://docs.opencv.org/4.5.2/d8/d6a/group__imgcodecs__flags.html#ga61d9b0126a3e57d9277ac48327799c80
ImreadModes에서.
이미지 속성
모양:
모든 이미지에는 모양이 있습니다. 그림에 나타난 경계의 길이는 모양, 즉 높이와 너비라고 할 수 있습니다. 이제 이미지 읽는 법을 알았으니 이미지의 모양을 확인해 볼까요?
인쇄(img.shape)
이미지의 모양을 인쇄하는 기본 방법이지만 다음을 사용하여 모양을 추출할 수 있습니다.
h, w, c = img.shape print("이미지 크기: nnHeight:", h, "pixelsnWidth:", w, "pixelsn채널 수:", c)
더 나은 이해를 얻기 위해.
색상 및 변경되지 않은 모드의 경우 높이, 너비 및 이미지에 있는 채널 수를 포함하여 3개의 값을 반환합니다. 회색조 모드를 사용한 경우 모양은 2가 되어 이미지의 높이와 너비를 반환하지만 h 및 w 변수만 사용해야 합니다( "c" 사용 제외). 그렇지 않으면 다음을 얻을 수 있습니다. "압축을 풀기에 값이 충분하지 않습니다(예상 3, 2가 있음)"라는 값 오류.
유형:
"type" 방법을 사용하여 이미지의 유형을 알 수 있습니다. 이 방법을 사용하면 이미지 데이터가 어떻게 표현되는지 알 수 있습니다. 다음과 같이 코드를 실행합니다.
인쇄(유형(이미지))
결과는 다음과 같을 수 있습니다.
이미지 유형으로. 동일한 유형 및 크기의 항목이 있는 다차원 컨테이너입니다. 다음 링크에서 N차원 배열에 대해 더 많이 참조할 수 있습니다.
https://numpy.org/doc/stable/reference/arrays.ndarray.html
방금 읽은 이미지의 데이터 유형:
이미지는 N차원 배열이므로 이미지의 데이터 유형을 확인할 수 있습니다.
인쇄(img.dtype)
이미지 픽셀 값:
우리는 이미지를 작은 샘플의 집합으로 생각할 수 있습니다. 이러한 샘플을 픽셀이라고 합니다. 이해를 돕기 위해 이미지를 최대한 확대해 보세요. 우리는 같은 것을 다른 사각형으로 나누는 것을 볼 수 있습니다. 이들은 픽셀이며 함께 결합되면 이미지를 형성합니다.
이미지를 표현하는 간단한 방법 중 하나는 행렬 형태입니다. 행렬을 사용하여 이미지를 만들고 저장할 수도 있습니다! 이 게시물의 뒷부분에서 방법을 보여줍니다. 아래의 이 사진을 보십시오.
이미지 2
이 그림은 오히려 이미지의 행렬 표현이 어떻게 보이는지 보여주는 예입니다. 왼쪽에는 링컨의 이미지가 있고 가운데에는 픽셀 값이 0에서 255까지의 숫자로 레이블되어 강도 또는 밝기를 나타내고 오른쪽에는 행렬 형태의 숫자가 표시됩니다. 행렬의 각 값은 이미지에 있는 정보의 가장 작은 요소인 픽셀에 해당합니다. 이미지를 로드한 변수를 인쇄하여 이미지 픽셀 값을 확인하십시오!
인쇄(이미지)
이미지 해상도 :
이미지 해상도는 이미지에 존재하는 픽셀 수로 정의할 수 있습니다. 픽셀 수가 증가하면 이미지 품질이 향상됩니다. 우리는 이전에 행과 열의 수를 나타내는 이미지의 모양을 보았습니다. 이것은 그 이미지의 해상도라고 할 수 있습니다. 표준 해상도 중 일부는 거의 모든 사람이 알고 있는 320 x 240픽셀(대부분 작은 화면 장치에 적합), 1024 x 768픽셀(표준 컴퓨터 모니터에서 보기에 적합), 720 x 576픽셀(표준 화질 TV에서 보기에 적합)입니다. 종횡비가 4:3인 세트), 1280 x 720픽셀(와이드스크린 모니터에서 보기용), 1280 x 1024픽셀(5:4 종횡비의 LCD 모니터에서 전체 화면 크기로 보기에 적합), 1920 x 1080픽셀 (HD TV에서 보기용) 이제 우리는 초고화질 모니터와 텔레비전에서 각각 지원하는 4 x 5 픽셀, 8 x 3840 픽셀 및 2160 x 5120 픽셀인 2880K, 7,680K 및 4,320K 해상도를 가지고 있습니다.
열 수와 행 수를 곱하면 이미지에 있는 총 픽셀 수를 얻을 수 있습니다. 예를 들어, 320 x 240 이미지에서 여기에 있는 총 픽셀 수는 76,800픽셀입니다.
이미지 보기
창에 이미지를 표시하는 방법을 살펴보겠습니다. 이를 위해 화면에 이미지를 표시할 GUI 창을 만들어야 합니다. 첫 번째 매개변수는 문자열 형식으로 지정된 GUI 창 화면의 제목이어야 합니다. cv2.imshow() 메서드를 사용하여 팝업 창에 이미지를 표시할 수 있습니다. 그러나 닫으려고 하면 창에 갇힌 느낌이 들 수 있습니다. 따라서 이를 방지하기 위해 간단한 "waitKey" 메서드를 사용할 수 있습니다. 새 셀에서 이 코드 부분을 사용해 보세요.
cv2.imshow('Mandrill', img) k = cv2.waitKey(0) if k == 27 또는 k == ord('q'): cv2.destroyAllWindows()
여기에서 "waitKey"에 매개변수 '0'을 지정하여 창을 닫을 때까지 창을 계속 열어 두었습니다. (0 대신에 시간을 밀리초 단위로 지정하여 열어야 하는 시간을 지정할 수도 있습니다.) 그런 다음 'ESC' 키 또는 ' 키를 누를 때 창을 닫는 역할을 하는 변수를 할당할 수 있습니다. NS'. cv2.destroAllWindows() 메서드는 화면/메모리에서 GUI 창을 닫거나 삭제하는 데 사용됩니다.
이미지 저장
이미지를 저장하기 전에 이미지를 회색조로 변환하여 저장하는 것은 어떻습니까? 다음을 사용하여 이미지를 회색조로 변환합니다.
회색 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
이제 이미지를 저장할 수 있습니다.
cv2.imwrite('Mandrill_grey.jpg', 회색)
현재 작업 디렉토리에 저장되고 있는 이미지를 확인합니다. 첫 번째 매개변수는 이미지가 저장될 파일의 이름에 해당하고 두 번째 매개변수는 이미지(픽셀 정보)를 포함하는 변수입니다.
이미지 비트 평면 추출 및 재구성
이미지를 비트 평면의 다른 수준으로 나눌 수 있습니다. 예를 들어, 이미지를 8비트(0-7) 평면으로 나눕니다. 여기서 마지막 몇 평면에는 이미지에 대한 대부분의 정보가 포함됩니다.
이미지 3
이를 위해 두 개의 패키지를 더 가져올 수 있습니다.
matplotlib.pyplot을 plt로 가져오기 numpy를 np로 가져오기
패키지를 가져오는 동안 오류가 발생하면 다음을 사용하여 설치할 수 있습니다.
conda 설치 -c conda-forge matplotlib conda 설치 -c 아나콘다 numpy
이제 우리는 이미지의 8레벨 비트 평면을 각각 추출하는 함수를 정의하고 있습니다.
def extract_bit_plane(cd): # c1에서 c8까지의 변수 # 1에서 8까지 모든 비트를 하나씩 추출 c1 = np.mod(cd, 2) c2 = np.mod(np.floor(cd/2) , 2) c3 = np.mod(np.floor(cd/4), 2) c4 = np.mod(np.floor(cd/8), 2) c5 = np.mod(np.floor(cd/16) ), 2) c6 = np.mod(np.floor(cd/32), 2) c7 = np.mod(np.floor(cd/64), 2) c8 = np.mod(np.floor(cd/ 128), 2) # 원본 회색조 이미지와 동일한 형태로 이미지를 다시 결합 cc = 2 * (2 * (2 * c8 + c7) + c6) # 3개의 최상위 비트 평면으로 이미지 재구성 to_plot = [cd, c1, c2 , c3, c4, c5, c6, c7, c8, cc] 무화과, 축 = plt.subplots(nrows=2, ncols=5,figsize=(10, 8), subplot_kw={'xticks': [], ' yticks': []}) fig.subplots_adjust(hspace=0.05, wspace=0.05) ax용, i in zip(axes.flat, to_plot): ax.imshow(i, cmap='gray') plt.tight_layout() plt.show() cc 반환
이제 함수를 호출할 준비가 되었습니다.
재구성된_이미지 = 추출_비트_평면(회색)
마지막 세 개의 비트 평면, 즉 여섯 번째, 일곱 번째 및 여덟 번째 평면을 사용하여 이미지(거의 유사)를 재구성했습니다. 결과는 다음과 같습니다.
우리 스스로 작은 이미지를 만들어 보는 건 어떨까요? 지금 시도하자!
작은 합성 이미지 구성
XNUMX개의 다른 픽셀 강도 값을 가진 XNUMX개의 동심 정사각형을 포함하는 합성 이미지를 생성하려고 시도할 수 있습니다.
40, 80, 160 및 220.
con_img = np.zeros([256, 256]) con_img[0:32, :] = 40 # 위쪽 행 con_img[:, :32] = 40 #왼쪽 열 con_img[:, 224:256] = 40 # 오른쪽 열 con_img[224:, :] = 40 # 아래쪽 행 con_img[32:64, 32:224] = 80 # 위쪽 행 con_img[64:224, 32:64] = 80 # 왼쪽 열 con_img[64:224, 192: 224] = 80 # 오른쪽 열 con_img[192:224, 32:224] = 80 # 아래쪽 행 con_img[64:96, 64:192] = 160 # 위쪽 행 con_img[96:192, 64:96] = 160 # 왼쪽 열 con_img[96:192, 160:192] = 160 # 오른쪽 열 con_img[160:192, 64:192] = 160 # 아래쪽 열 con_img[96:160, 96:160] = 220 plt.imshow(con_img)
결과 이미지는 다음과 같습니다.
다른 기사에서 이미지에 다양한 필터와 변형을 사용하는 방법을 살펴볼 수 있습니다.
기사를 읽어주셔서 감사합니다.
이미지 4
의견 아래에 제안 사항을 추가하고 이 기사가 마음에 들면 공유하십시오. 이 기사에서 언급한 Jupyter Notebook의 전체 Python 프로그래밍 코드는 내 Github 리포지토리에서 사용할 수 있습니다.
https://github.com/jissdeodates/Beginner-s-Guide-to-Computer-Vision
참조 :
- 이미지 1 – https://seevisionc.blogspot.com/2013/09/computer-vision-is-everywhere.html
- 이미지 2- https://towardsdatascience.com/everything-you-ever-wanted-to-know-about-computer-vision-heres-a-look-why-it-s-so-awesome-e8a58dfb641e
- Image 3- https://nptel.ac.in/content/storage2/courses/117104069/chapter_8/8_13.html
- 이미지 4- https://memegenerator.net/instance/21508026/willy-wonka-oh-so-you-created-a-computer-vision-algorithm-you-must-never-lose-the-remote
https://docs.opencv.org/4.5.2/d1/dfb/intro.html
https://docs.opencv.org/4.5.2/db/deb/tutorial_display_image.html
이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다.
관련
- "
- 4k
- 7
- 8k
- 절대
- 농업
- All
- 알파
- 분석
- 어플리케이션
- 기사
- 인공 지능
- 자동차
- 기초
- 비트
- 검정
- 블로그
- 전화
- 이전 단계로 돌아가기
- 채널
- 암호
- 코딩
- 단
- 댓글
- 컴퓨터 비전
- 컨테이너
- Current
- 데이터
- 거래
- 디바이스
- 도메인
- 등
- 추출물
- 무화과
- 필터
- 먼저,
- 형태
- 체재
- 무료
- 기능
- 지프
- GitHub의
- 좋은
- 회색
- 그레이 스케일
- 안내
- 여기에서 지금 확인해 보세요.
- 높은
- 방법
- How To
- HTTPS
- 생각
- 영상
- 가져 오기
- 포함
- 정보
- 인텔리전스
- IT
- 주피터 수첩
- 키
- 언어
- 배우기
- 레벨
- 도서관
- 링컨
- LINK
- 지방의
- 기계 학습
- 기계
- 과반수
- 제조
- 미디어
- 의료
- 뮘
- 숫자
- 열 수
- OpenCV
- 기타
- 관점
- 전망
- .
- 픽셀
- 비행기들
- 제시
- 키를 눌러
- 프로그램
- 프로그램 작성
- 프로그래밍 언어
- Python
- 품질
- 읽기
- 달리기
- 절약
- 과학
- 화면
- 세트
- 공유
- 단순, 간단, 편리
- 크기
- 작은
- So
- 시작
- 지원
- 지원
- 말하다
- 기초
- 시간
- 투명도
- tv
- 울트라
- us
- 가치
- Video
- 동영상
- 관측
- 시력
- W
- 누구
- 창
- 이내
- 말
- X
- 줌