NLP_자연언어처리, Colab

[Colab] Histogram 코드

vhxpffltm 2020. 4. 7. 21:42

Histogram 

 

이미지 처리 컨텍스트에서, 이미지의 히스토그램은 일반적으로 '픽셀 강도 값'의 히스토그램을 지칭한다 . 이 히스토그램은 이미지에서 발견 된 각각의 다른 강도 값에서 이미지  픽셀 수를 나타내는 그래프이다. 8 비트 grayscale의 경우 256 가지의 다른 가능한 강도가 있으므로 히스토그램은 그레이 스케일 값 사이의 픽셀 분포를 나타내는 256 개의 숫자를 그래픽으로 표시한다. 히스토그램은 컬러 이미지로도 촬영할 수 있다 .- 빨간색, 녹색 및 파란색 채널의 개별 히스토그램을 촬영하거나 3D 히스토그램을 생성 할 수 있습니다. 세 개의 축은 빨간색, 파란색, 녹색을 나타냅니다.채널 수, 픽셀 수를 나타내는 각 지점의 밝기. 연산의 정확한 결과는 구현에 따라 다르며, 적절한 이미지 형식의 필수 히스토그램 그림이거나 히스토그램 통계를 나타내는 일종의 데이터일 수 있다.

 

구글 Colab을 사용한 히스토그램에 대한 코드는 아래와 같다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
from PIL import Image
import cv2
#이미지를 grayscale로 변환
img_gray = cv2.imread('puppy.png',cv2.IMREAD_GRAYSCALE)
 
#히스토그램 생성
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import numpy as np
import cv2
from google.colab.patches import cv2_imshow
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
img = cv2.imread('puppy.png', cv2.IMREAD_COLOR)
 
# 채널을 BGR -> RGB로 변경 : cv2의 채널은 BGR로 세팅되어 있으므로
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 
 
 # 1개 color만 추출 후 2차원->1차원 배열로 변경
= np.array(img)[:, :, 0].flatten()
= np.array(img)[:, :, 1].flatten()
= np.array(img)[:, :, 2].flatten()
 
# flatten은 평균, 분산, 표준편차 결과에 영향 미치지 않음
mean_r = np.mean(r)
var_r = np.var(r)
std_r = np.std(r)
 
# Histogram 그리기
 
# bar 넓이 범위 설정
bins_range = range(02578
# x tic값 범위 설정
xtics_range = range(025732)
 
# Ver1 : RGB 한번에 그리기 (subplot 이용)
fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, ncols=1, sharex=True, sharey=False)
 
ax0.hist(r, bins=bins_range, color='r', normed=False)
ax1.hist(g, bins=bins_range, color='g', normed=False)
ax2.hist(b, bins=bins_range, color='b', normed=False)
 
 
plt.setp((ax0, ax1, ax2), xticks=xtics_range, xlim=(0256))
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
import cv2
 
 
# mask 생성
mask = np.zeros(img.shape[:2], np.uint8)
mask[900:13000:2000= 255
masked_img = cv2.bitwise_and(img,img,mask = mask)
 
# mask와 전체에대한 grayscale histogram값 계산
# Check third argument for mask
hist_full = cv2.calcHist([img],[0],None,[256],[0,256])
hist_mask = cv2.calcHist([img],[0],mask,[256],[0,256])
 
plt.subplot(221), plt.imshow(img, 'gray')
plt.subplot(222), plt.imshow(mask,'gray')
plt.subplot(223), plt.imshow(masked_img, 'gray')
plt.xlim([0,256])
#주황색이 특정 부분에대한 grayscale값 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

 

 

Image Filtering

이미지 필터링이란 Liner System(선형 시스템)을 통해 원하는 성분을 뽑아내는 것이다.

 

위와 같이 어떤 Linear system을 통해 원하는 성분을 추출하는 것이다.

이미지 프로세싱에서 가우시안, 샤프닝 등이 사용되며 가우시안 필터링은 노이즈가 발생한다.

그것은 스무딩 기법으로 해결할 수 있다. 

 

샤프닝은 성분을 거칠게 표현하고 스무딩은 부드럽게 처리한다. 스무딩의 경우 블러현상이 발생할 수 있다.

 

canny edge detector

Edge 탐색 알고리즘 중 하나이다. 다음 글에 도로 선을 탐지하는 코드를 실습해본다.

 

 

 

 

 

Reference

https://homepages.inf.ed.ac.uk/rbf/HIPR2/histgram.htm

 

https://takehoon.tistory.com/entry/%EC%98%81%EC%83%81%EC%B2%98%EB%A6%AC-Filtering%EC%9D%B4%EB%9E%80

 

https://www.google.com/search?sxsrf=ALeKk005NH8a9mW_ul9-8BkDHaRacgP_qw%3A1586259609820&ei=mWaMXsTeMcWmoAS5-KPgDA&q=line+fitting+ransac&oq=line+fitting+RA&gs_lcp=CgZwc3ktYWIQAxgAMgQIABAeMgYIABAIEB4yBggAEAUQHjIGCAAQBRAeMgYIABAIEB4yBggAEAgQHjIGCAAQCBAeMgYIABAIEB4yBggAEAgQHjIICAAQCBAKEB46BAgjECc6CggAEIMBEBQQhwI6BQgAEIMBOgIIADoHCCMQ6gIQJzoGCCMQJxATOgQIABBDOgUIABDLAUoxCBcSLTBnMTM0ZzE1M2cxNTNnMTQ5ZzE0NGcxMzFnMTQ5ZzEzMWcxNDBnMTM1ZzEzMkobCBgSFzBnMmcxZzFnMWcxZzFnMWcyZzJnNmcxULO5DVjJ9w1guYIOaAdwAHgAgAGUAYgB1RKSAQQwLjE5mAEAoAEBqgEHZ3dzLXdperABCg&sclient=psy-ab