基礎ユニット2(イメージメディア) 第10回(2018/12/13)

関連サイトと資料

サンプル画像

island.jpg

wiki.jpg

snow.jpg

cherry.jpg

サンプルプログラム

contrast1.py(ヒストグラム拡張)
import cv2
import numpy as np
import os
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
	
def histogram_spread(hist, orgImg):
	関数の中身は各自で考える!
	
# パラメータ
target = 'island.jpg'
f3, f4 = os.path.splitext(target)
savename = f3 + '_spread' + f4
	
# ヒストグラムの算出とヒストグラム拡張
img = cv2.imread(target, cv2.IMREAD_GRAYSCALE)
height, width = img.shape
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
hist2, imgSpread = histogram_spread(hist, img)
cv2.imwrite(savename, imgSpread)
	
# 表示
fp = FontProperties(fname=r'C:\\WINDOWS\\Fonts\\msgothic.ttc', size=12)
val_x = []
val_y1 = []
val_y2 = []
for i in range(256):
    val_x.append(i)
    val_y1.append(int(hist[i][0]))
    val_y2.append(int(hist2[i][0]))
	
ax1 = plt.subplot(2, 1, 1)
ax2 = plt.subplot(2, 1, 2)
	
ax1.bar(np.array(val_x), np.array(val_y1), color="#FF0000")
ax1.set_title(u'ヒストグラム({0})'.format(target), fontproperties=fp)
ax1.set_xlabel(u'ピクセル値', fontproperties=fp)
ax1.set_ylabel(u'頻度', fontproperties=fp)
	
ax2.bar(np.array(val_x), np.array(val_y2), color="#FF0000")
ax2.set_title(u'ヒストグラム(ヒストグラム拡張した{0})'.format(target), fontproperties=fp)
ax2.set_xlabel(u'ピクセル値', fontproperties=fp)
ax2.set_ylabel(u'頻度', fontproperties=fp)
	
plt.show()

contrast1.pyの実行結果

island_spread.jpg

contrast2.py(ヒストグラム平坦化)
import cv2
import numpy as np
import os
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
	
def histogram_equalization(hist, orgImg):
	関数の中身は各自で考える!
	
# パラメータ
target = 'cherry.jpg'
f3, f4 = os.path.splitext(target)
savename = f3 + '_equalization' + f4
	
# ヒストグラムの算出
img = cv2.imread(target, cv2.IMREAD_GRAYSCALE)
height, width = img.shape
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
hist2, imgEqualization = histogram_equalization(hist, img)
cv2.imwrite(savename, imgEqualization)
	
# 表示
fp = FontProperties(fname=r'C:\\WINDOWS\\Fonts\\msgothic.ttc', size=12)
val_x = []
val_y1 = []
val_y2 = []
for i in range(256):
    val_x.append(i)
    val_y1.append(int(hist[i][0]))
    val_y2.append(int(hist2[i][0]))
	
ax1 = plt.subplot(2, 1, 1)
ax2 = plt.subplot(2, 1, 2)
	
ax1.bar(np.array(val_x), np.array(val_y1), color="#FF0000")
ax1.set_title(u'ヒストグラム({0})'.format(target), fontproperties=fp)
ax1.set_xlabel(u'ピクセル値', fontproperties=fp)
ax1.set_ylabel(u'頻度', fontproperties=fp)
	
ax2.bar(np.array(val_x), np.array(val_y2), color="#FF0000")
ax2.set_title(u'ヒストグラム(ヒストグラム平坦化した{0})'.format(target), fontproperties=fp)
ax2.set_xlabel(u'ピクセル値', fontproperties=fp)
ax2.set_ylabel(u'頻度', fontproperties=fp)
	
plt.show()

contrast2.pyの実行結果

cherry_equalization.jpg

contrast2b.py(ヒストグラム平坦化/cv2.equalizeHist()を使用)
import cv2
import numpy as np
import os
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
       
# パラメータ
target = 'cherry.jpg'
f3, f4 = os.path.splitext(target)
savename = f3 + '_equalization2' + f4
    
# 処理
img = cv2.imread(target, cv2.IMREAD_GRAYSCALE)
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
img2 = cv2.equalizeHist(img)
hist2 = cv2.calcHist([img2], [0], None, [256], [0, 256])
cv2.imwrite(savename, img2)
    
# 表示
fp = FontProperties(fname=r'C:\\WINDOWS\\Fonts\\msgothic.ttc', size=12)
val_x = []
val_y1 = []
val_y2 = []
for i in range(256):
    val_x.append(i)
    val_y1.append(int(hist[i][0]))
    val_y2.append(int(hist2[i][0]))
    
ax1 = plt.subplot(2, 1, 1)
ax2 = plt.subplot(2, 1, 2)
    
ax1.bar(np.array(val_x), np.array(val_y1), color="#FF0000")
ax1.set_title(u'ヒストグラム({0})'.format(target), fontproperties=fp)
ax1.set_xlabel(u'ピクセル値', fontproperties=fp)
ax1.set_ylabel(u'頻度', fontproperties=fp)
    
ax2.bar(np.array(val_x), np.array(val_y2), color="#FF0000")
ax2.set_title(u'ヒストグラム(ヒストグラム平坦化した{0})'.format(target), fontproperties=fp)
ax2.set_xlabel(u'ピクセル値', fontproperties=fp)
ax2.set_ylabel(u'頻度', fontproperties=fp)
    
plt.show()

contrast2b.pyの実行結果

cherry_equalization2.jpg