수색…


비고

디지털 이미지 프로세싱과 컴퓨터 비전은 수학과 컴퓨터 사이에 아름답게 위치하기 때문에 흥미로운 분야입니다. 따라서 기본 사항을 이해하고 프로그래밍을 사용하여 주제를 이해하는 것이 매우 유용합니다.

디지털 이미지는 2 차원 또는 3 차원 신호의 이산화입니다. 즉, 디지털 이미지는 샘플링 된 일련의 픽셀 또는 연속 도메인의 복셀입니다.

                                        f : R² ⊃ Ω → R

f가 Ω에 대한 디지털 이미지 인 경우 : Rectangular image domain

단순화를 위해 StackOverflow 아바타와 같은 2 차원 디지털 이미지에 대해서만 설명하겠습니다.

픽셀 정보 : 이미지 유형에 대해 논의하기 전에 픽셀 값에 대한 간단한 설명입니다. 엄지 픽셀의 규칙은 빛이없는 (검은 색) 것을 나타내는 값 0부터 시작하여 1, 최대 밝기 (예 : 흰색)에 도달하며 정수로 표시됩니다.

이진 이미지 : 흑백 이미지 만. 각 픽셀은 0 또는 1이며, 각 픽셀은 비트로 나타낼 수 있습니다. 그것들은 일반적으로 과학적 응용이나 다른 이미지 처리 작업에 마스크로 사용되기 때문에 잘 알려져 있지 않습니다.

이진 형태의 Lena 이미지

이진 이미지 예제. (이 파일의 이미지 픽셀 값은 반드시 바이너리가 아니라는 것을 경고합니다. 데모 용입니다. 또한 Lena, Image Processing world의 별)

그레이 스케일 이미지 : 온라인 필터 덕택에 모든 사람이 여전히이 이미지를 잘 알고 있습니다. 이 이미지는 일반적으로 1 픽셀 당 1 바이트이며, 0은 검정색이고 255는 흰색입니다. 그 사이의 모든 것은 다른 톤의 회색이며, 사람이 회색의 40 가지 음영 만 구별 할 수 있다는 점을 고려하면이 범위는 많은 응용 프로그램에 충분합니다. 의 픽셀은 0에서 1까지의 바이트 값 0에서 255까지 매핑됩니다)

회색조의 레나 이미지

컬러 이미지 : 마지막으로, 가장 일반적인 디지털 이미지 유형, 컬러 이미지. 여기서 채널의 개념을 언급해야합니다. 디지털 이미지는 또한 채널을 가지고 실제로는 위에서 설명한 2 진 및 그레이 스케일 이미지에도 채널이 있습니다. 대부분의 일반적인 설명은 RGB (Red-Green-Blue) 모델입니다.이 경우 이미지에는 이미지의 적색, 청색 및 녹색을 나타내는 3 개의 채널이 있습니다 (치수와 혼동하지 마십시오. 여전히 2D 이미지 임). 이 경우, 각 픽셀은 0 - 255 (가장 적색에서 가장 적색까지), 0 - 255 (녹색이 가장 녹색 인 것), 0 - 255 (파란색이 아닌 대부분의 파란색) 사이의 값입니다. 이 모델의 경우 픽셀 {0,0,0}은 검은 색이고 {255,255,255}는 흰색, {255,0,0}은 빨간색, {255, 255, 0}은 노란색입니다. 그러나 색상은 매우 광범위한 주제이며 자세한 내용은 참조를 확인할 수 있습니다.

색상의 리나 이미지

하이퍼 - 스펙트럼 이미지 :

채널을 논의한 후 하이퍼 스펙트럼 이미지에 대해 이야기하는 것이 더 쉽습니다. 이러한 이미지는 수백 개의 채널을 가질 수 있으며 일반적으로 현미경, 위성 영상 등에 사용됩니다.

독서

  1. 신호 샘플링 : https://en.wikipedia.org/wiki/Sampling_(signal_processing)

  2. 디지털 이미지 프로세싱의 성경 : RC Gonzalez, RE Woods : 디지털 이미지 프로세싱. 제 3 판, Pearson Prentice Hall, Upper Saddle River, 2008.

  3. 컴퓨터 비전 검토 (깊은 학습까지) : R. Szeliski : 컴퓨터 비전 : 알고리즘 및 응용. 스프링 어, 뉴욕, 2010입니다.

  4. 바이너리, 회색조, 컬러 이미지에 대한 이해를 돕기 위해 : https://en.wikipedia.org/wiki/Grayscale

설치 또는 설정

컴퓨터 비전 설정 또는 설치에 대한 자세한 지침.

이 기사와 다음 컴퓨터 비전 시리즈에서는 Python 2를 프로그래밍 언어로 사용합니다. 파이썬은 과학 공동체를위한 공통의 선택입니다. 무료이며, 무료 및 오픈 소스 용 라이브러리가 많이 있습니다. 프로그래밍을 배우기 쉽고 프로그래밍하기 쉽도록 프로그래밍 한 경우.

이제 리눅스를 사용한다면 아마도 이미 파이썬을 가지고있을 것입니다. 터미널을 열고 '파이썬'을 입력하면 모든 것이 이미 작동하는지 확인할 수 있습니다. 기타, 이 링크 를 확인하고 python 2.7을 다운로드 할 수 있습니다.

둘째, 사용할 라이브러리를 소스 코드에 설치해야합니다. 이제는이 예제가이 예제를 위해 설계되었으므로 나중에 다른 라이브러리를 추가 할 것이며 물론 다른 컴퓨터 비전 응용 프로그램에는 OpenCV와 같은 특정 라이브러리가 필요할 수 있습니다. 코드를 실행하려면 시스템에 하나의 라이브러리 만 설치하면됩니다. 파이썬을 사용할 때 일반적으로 'pip'를 사용하여 종속성을 설치합니다. 그것은 파이썬 모듈을 설치하는 간단한 도구입니다, 당신은 또한 이 링크 를 통해 확인할 수 있습니다

이제 우리는 필요한 라이브러리 인 PyPNG를 설치할 준비가되었습니다. 당신이해야 할 모든 것을 사용한다면

PyPNG 설치 pip

Linux / Mac을 사용하는 경우 터미널에서 Windows를 사용하는 경우 명령 줄에서

또한이 연습에서는 소스 코드 및 ipython 노트와 함께 github 링크에서 찾을 수있는 이미지를 가져와야합니다.

https://github.com/Skorkmaz88/compvis101

이제 우리는 운동을 잘해야합니다.

예제들

이것은 매우 간단한 이미지 처리 및 컴퓨터 비전 Python 운동 시리즈로, 이러한 주제를 거의 실용하지 않고 소개합니다. 신참 실수로 인해 미안하지만 아직 개발 중입니다. 이 시리즈에서는 단순화를 위해 PNG 파일에 사용할 수있는 디지털 이미지를 제한 할 예정이며 이미지 압축 주제에 대해서도 설명합니다.

아직 저장소를 복제하지 않았 으면 저장소를 복제하거나 단순히 Github을 통해 여기에서 다운로드 할 수 있습니다.

git clone https://github.com/Skorkmaz88/compvis101

사용할 수있는 파일이 두 개 있습니다. 그 중 하나는 tutorial0.py이고 다른 하나는 readingImages.ipynb이고 두 번째 파일은 ipython 노트북입니다. 그러나 두 파일은 같은 일을합니다.

코드는 설명에 설명이 있습니다.


 # libs
import png

# We create a greyscale image as described in our text.
# To do that simply, we create a 2D array in python. 
# x and y, x being horizontal and y being vertical directions.

x  = []
y = []
# Play around with these pixels values to get different grayscale images, they shoud be 
# in range of 0 - 255. 
white = 255
gray = 128
black = 0
width  = 100
height = 300

# Add 100 x 100 rectangle as just white(255) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(white); # Pixel (i,j) is being set to a value, rest is coding trick to nest two lists 
    x.append(y)
    y = []
    
# Add 100 x 100 rectangle as just mid-gray(128) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(gray);
    x.append(y)
    y = []

# Add 100 x 100 rectangle as just black(0) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(black);
    x.append(y)
    y = []

# output image file 
f = open('out.png', 'wb')
w = png.Writer(width, height , greyscale=True, bitdepth=8)
w.write(f, x)
f.close()
# If everything went well, you should have 3 vertically aligned rectangles white, gray and black 
# Check your working folder

# PART 2
# Read a grayscale image and convert it to binary

# This time we will binarize a grayscale image, to do that we will read pixels and according to threshold we set
# we will decide if that pixel should be white or black 

# This file is originally 8 bit png image, can be found in github repository, you should use only this type of
# images if you want to change the image.
f = open('./img/lenaG.png', 'r')

r=png.Reader(file=f)
# You will the details about the image, for now pay attention to size and bitdepth only.
img = r.read()

width = img[0]
height = img[1]
# Threshold value for binarizing images, 
threshold = 128
print "Input image size is: "+ str(width)+ " pixels as  width, " + str(height) + " pixels as height"

f_out = open('lenaBinary.png', 'wb')
w = png.Writer(width, height , greyscale=True, bitdepth=1)

pixels = img[2]
 
x = []
y = []

# Let's traverse the Lena image 
for row in pixels:
    for pixel in row:
        p_value =  pixel
        # Now here we binarize image in pixel level
        if p_value > threshold:
            p_value = 1
        else:
            p_value = 0
            
        y.append(p_value);
    x.append(y)
    y = []

w.write(f_out, x)
f_out.close()

모든 것이 잘 작동한다면, 축하해! 처음부터 이미지를 만들고 기존 이미지에서 첫 번째 픽셀 수준 변환을 수행했습니다. 새 이미지를 보려면 작업 폴더를 확인하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow