python 디지털 이미지 처 리 는 직사 도 와 균형 화 를 실현 합 니 다.

이미지 처리 에서 직사 도 는 매우 중요 하고 매우 유용 한 처리 요소 이다.
skimage 라 이브 러 리 에서 직사 도 를 처리 하 는 것 은 exposure 모듈 에 있 습 니 다.
1.계산 직사 도
함수:skimage.exposure.histogram(image,nbins=256)
numpy 패키지 에서 도 직사 도 를 계산 하 는 함수 histogram()을 제공 합 니 다.
tuple(hist,binscenter)앞의 배열 은 직사 도 의 통 계량 이 고 뒤의 배열 은 모든 빈 의 중간 값 이다.

import numpy as np
from skimage import exposure,data
image =data.camera()*1.0
hist1=np.histogram(image, bins=2)  # numpy      
hist2=exposure.histogram(image, nbins=2) # skimage     
print(hist1)
print(hist2)
출력:
(array([107432, 154712], dtype=int64), array([ 0. , 127.5, 255. ]))
(array([107432, 154712], dtype=int64), array([ 63.75, 191.25]))
두 개의 빈 으로 나 뉘 어 각 빈 의 통 계량 은 같 지만 numpy 는 각 빈 의 양 끝 범위 값 을 되 돌려 주 고 skimage 는 각 빈 의 중간 값 을 되 돌려 줍 니 다.
2.직사 도 그리 기
그림 을 그 리 는 것 은 모두 matplotlib.pyplot 라 이브 러 리 를 호출 하여 진행 할 수 있 으 며,그 중의 hist 함 수 는 직사 도 를 직접 그 릴 수 있 습 니 다.
호출 방식:
n, bins, patches = plt.hist(arr, bins=10, normed=0, facecolor='black', edgecolor='black',alpha=1,histtype='bar')
hist 의 매개 변 수 는 매우 많 지만 자주 사용 하 는 것 은 이 여섯 개 입 니 다.첫 번 째 만 필요 합 니 다.뒤의 네 개 만 선택 할 수 있 습 니 다.
arr:직사 도 를 계산 하 는 1 차원 배열 이 필요 합 니 다.
bins:직사 도 기둥 수,옵션 가능,기본 값 10
normed:얻 은 직사 도 벡터 를 획일 화 할 지 여부 입 니 다.기본 값 0
facecolor:직사 도 색상
edgecolor:직사각형 테두리 색상
투명도
histtype:직사 도 형식,'bar','barstacked','step','stepfilled'
반환 값:
n:직사 도 벡터,정규 화 여 부 는 매개 변수 normed 에서 설정 합 니 다.
bins:각 bin 의 구간 범 위 를 되 돌려 줍 니 다.
patches:각 빈 에 포 함 된 데 이 터 를 되 돌려 줍 니 다.list 입 니 다.

from skimage import data
import matplotlib.pyplot as plt
img=data.camera()
plt.figure("hist")
arr=img.flatten()
n, bins, patches = plt.hist(arr, bins=256, normed=1,edgecolor='None',facecolor='red') 
plt.show()

그 중의 flatten()함 수 는 numpy 가방 안에 있 는 것 으로 2 차원 배열 을 1 차원 배열 로 정렬 하 는 데 사용 된다.
줄 순
mat=[[1 2 3
    4 5 6]]
mat.flatten()을 지나 면
mat=[1 2 3 4 5 6]
3.컬러 사진 3 채널 직사 도
일반적으로 직사 도 는 그 레이스 케 일 에 대한 것 으로 rgb 이미지 의 3 채널 직사 도 를 그 리 려 면 실제 적 으로 3 개의 직사 도 중첩 이다.

from skimage import data
import matplotlib.pyplot as plt
img=data.lena()
ar=img[:,:,0].flatten()
plt.hist(ar, bins=256, normed=1,facecolor='r',edgecolor='r',hold=1)
ag=img[:,:,1].flatten()
plt.hist(ag, bins=256, normed=1, facecolor='g',edgecolor='g',hold=1)
ab=img[:,:,2].flatten()
plt.hist(ab, bins=256, normed=1, facecolor='b',edgecolor='b')
plt.show()
그 중에서 매개 변수 hold=1 을 추가 하면 중첩 할 수 있 음 을 나타 낸다.

4.직사 도 균형 화
만약 에 한 이미지 의 픽 셀 이 많은 그 레이스 케 일 을 차지 하고 분포 가 균일 하 다 면 이런 이미 지 는 높 은 대비 도와 변화 가 많은 그 레이스 케 일 을 가진다.직사 도 균형 화 는 이미지 직사 도 정 보 를 입력 하 는 것 만으로 이런 효 과 를 자동 으로 얻 을 수 있 는 변환 함수 이다.그의 기본 사상 은 이미지 에 있 는 픽 셀 개수 가 많은 그 레이스 케 일 을 넓 히 고 이미지 에 있 는 픽 셀 개수 가 적은 그 레이스 케 일 을 압축 하여 수치 추출 의 동적 범 위 를 확대 하여 대비 도와 그 레이스 케 일 톤 의 변 화 를 향상 시 켜 이미 지 를 더욱 선명 하 게 하 는 것 이다.

from skimage import data,exposure
import matplotlib.pyplot as plt
img=data.moon()
plt.figure("hist",figsize=(8,8))

arr=img.flatten()
plt.subplot(221)
plt.imshow(img,plt.cm.gray) #    
plt.subplot(222)
plt.hist(arr, bins=256, normed=1,edgecolor='None',facecolor='red') #       

img1=exposure.equalize_hist(img)
arr1=img1.flatten()
plt.subplot(223)
plt.imshow(img1,plt.cm.gray) #     
plt.subplot(224)
plt.hist(arr1, bins=256, normed=1,edgecolor='None',facecolor='red') #      

plt.show()

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기