이미지 처리 #2 RGB, 히스토그램
8026 단어 imageprocessingformyownusepython
이 각서에 대해
최근 직장에서 딥러닝과 영상/영상 처리를 체험할 기회가 있었는데, 파라미터를 터치하고 데이터를 증폭하는 방법에 대해 이해하지 못하는 부분이 많아 영상 처리를 처음부터 공부하기로 했습니다.
컬러 이미지 및 회색조 이미지
그러나 실제로는 3개의 R, G, B 계조 이미지로 구성되어 있다는 것이 정확한 이해입니다.
자동차는 원래 빨간색이기 때문에 왼쪽 R 채널의 픽셀 값은 255에 가깝고 회색조 이미지에서는 흰색으로 나타납니다. 반면에 G 및 B 채널은 픽셀 값이 더 작아서 검은색으로 나타납니다.
암호
im = imread([file_path])
imshow(im)
plt.title("original RGB image")
plt.show()
r_channel = im[:, :, 0]
g_channel = im[:, :, 1]
b_channel = im[:, :, 2]
fig = plt.figure(figsize=(15,3))
for i, c in zip(range(3), 'RGB'):
ax = fig.add_subplot(1, 3, i + 1)
imshow(im[:, :, i], vmin=0, vmax=255)
plt.colorbar()
plt.title(f'{c} channel')
plt.show()
RGB&BGR
유일한 차이점은 데이터의 해석이지만 주의해야 합니다.
RGB
BGR
일반적인 실수는 opencv(BGR)로 로드된 이미지가 scikit-image(RGB)로 표시될 때 빨간색과 파란색이 반전된다는 것입니다.
코드(오류의 예)
im_BGR = cv2.imread(INPUT_DIR + 'IMG-4034.JPG') # OpenCV
imshow(im_BGR) # matplotlibのimshowはRGBを仮定
plt.title('show BGR image as RGB image')
plt.axis('off')
plt.show()
다음을 포함하여 이 문제를 해결하는 몇 가지 방법이 있습니다.
코드:RGB 및 GBR 변환
### use the built-in functions
im_BGR_to_RGB = cv2.cvtColor(im_BGR, cv2.COLOR_BGR2RGB)
imshow(im_BGR_to_RGB)
plt.title('show RGB-converted BGR image as RGB image')
plt.axis('off')
plt.show()
### not use the built-in functions1
im_BGR_to_RGB = im_BGR[:, :, ::-1]
imshow(im_BGR_to_RGB)
plt.title('show RGB-converted BGR image as RGB image')
plt.axis('off')
plt.show()
### not use the built-in functions1(explanation process of 1 above.)
im_BGR_to_RGB = np.zeros_like(im_BGR)
im_BGR_to_RGB[:, :, 0] = im_BGR[:, :, 2]
im_BGR_to_RGB[:, :, 1] = im_BGR[:, :, 1]
im_BGR_to_RGB[:, :, 2] = im_BGR[:, :, 0]
imshow(im_BGR_to_RGB)
plt.title('show RGB-converted BGR image as RGB image')
plt.axis('off')
plt.show()
회색조 이미지를 만드는 방법.
이를 수행하는 데 잘못된 방법이나 올바른 방법은 없으며 표준이 다를 뿐입니다.
그러나 모든 방법이 거의 같아 보이지만 값이 다르기 때문에 함께 작업할 때 인식할 필요가 있습니다.
내장 함수를 사용
RGB 값의 합을 3으로 나눕니다.
표준: PAL/NTSC
표준: HDTV(내장 기능과 동일)
암호
im = imread(INPUT_DIR + 'IMG-4034.JPG')
imshow(im)
plt.title("original RGB image")
plt.show()
# Using the built-in rgb2gray function;gray = 0.2125 R + 0.7154 G + 0.0721 B
im_gray1 = rgb2gray(im)
imshow(im_gray1, vmin=0, vmax=1) # 型はfloat,範囲は[0,1]になる
plt.colorbar()
plt.title("rgb2gray min {0} max {1}".format(im_gray1.min(), im_gray1.max() ))
plt.show()
# The average of RGB is used as a grayscale image. First convert to float (the range will be [0,255]), then convert to uint8 for display.
im_gray2 = (im[:,:,0].astype(float) +
im[:,:,1].astype(float) +
im[:,:,2].astype(float)) / 3
imshow(im_gray2, vmin=0, vmax=255)
plt.colorbar()
plt.title("(R+B+G)/3 min {0:.2f} max {1:.2f}".format(im_gray2.min(), im_gray2.max() ))
plt.show()
# The weighted average of RGB is used as the grayscale image.
# https://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
im_gray3 = (0.299 * im[:,:,0].astype(float) +
0.587 * im[:,:,1].astype(float) +
0.114 * im[:,:,2].astype(float))
imshow(im_gray3, vmin=0, vmax=255)
plt.colorbar()
plt.title("$\gamma'$ of PAL and NTSC min {0:.2f} max {1:.2f}".format(im_gray3.min(), im_gray3.max() ))
plt.show()
# The weighted average of RGB is used as a grayscale image. The weight coefficients vary depending on the standard.
# https://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
# This is what rgb2gray() uses.http://scikit-image.org/docs/dev/api/skimage.color.html#skimage.color.rgb2gray
im_gray4 = (0.2126 * im[:,:,0].astype(float) +
0.7152 * im[:,:,1].astype(float) +
0.0722 * im[:,:,2].astype(float))
imshow(im_gray4, vmin=0, vmax=255)
plt.colorbar()
plt.title("$\gamma'$ of HDTV min {0:.2f} max {1:.2f}".format(im_gray4.min(), im_gray4.max() ))
plt.show()
히스토그램
픽셀 값의 빈도 분포를 보여주는 그래프입니다.
세 번째 사진은 화이트보드에 메타몬을 그린 모습이다.
메타몬 그리기의 피크는 0.5~0.8 부근에서 볼 수 있지만, 마커의 잉크량(그리기 할 때 사용하는 힘의 양 등)에 따라 약간의 요철이 있습니다.
또한 화이트보드 반대편(메타몬의 입 왼쪽)의 PC디스플레이가 반사되는 부분은 상당히 하얗다.이것이 0 부근에서 피크로 추정된다.
암호
im_files = ['file_path1', 'file_path2', 'file_path3']
for file in im_files:
im = imread(file)[:,:,:3] # In the case of RGBA, extract only RGB
fig = plt.figure(figsize=(20,3))
ax = fig.add_subplot(1, 3, 1)
im = rgb2gray(im) # Range;[0,1]
imshow(im)
plt.axis('off')
bins = 256
ax = fig.add_subplot(1, 3, 2)
freq, bins = histogram(im)
plt.plot(bins, freq)
plt.xlabel("intensity")
plt.ylabel("frequency")
plt.title('histogram (linear)')
plt.xlim(0,1)
ax = fig.add_subplot(1, 3, 3)
freq, bins = histogram(im)
plt.plot(bins, freq)
plt.xlabel("intensity")
plt.ylabel("log frequency")
plt.yscale('log')
plt.title('histogram (log)')
plt.xlim(0,1)
plt.show();
Reference
이 문제에 관하여(이미지 처리 #2 RGB, 히스토그램), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/haratena9/image-processing-2-rgb-histogram-5dii텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)