山内セミナー(2019/01/09)

関連サイトと資料

霧やもやの除去

Dehaze1.py
import cv2
import numpy as np
import os
	
def min3(a, b, c):
    v = a
	
    if v > b:
        v = b
    
    if v > c:
        v = a
    
    return v
	
target = 'canon7.jpg'
ohm = 5
	
base, ext = os.path.splitext(target)
saveFileName = base + '_dk_{0}'.format(ohm) + '.png'
	
orgImg = cv2.imread(target, cv2.IMREAD_COLOR)
height, width, _ = orgImg.shape
	
darkChImg = np.zeros((height, width), np.uint8)
	
for y in range(height):
    for x in range(width):
        rMin = 255
        gMin = 255
        bMin = 255
	
        for yy in range(y - ohm, y + ohm + 1):
            for xx in range(x -ohm, x + ohm + 1):
                if xx < 0 or xx >= width or yy < 0 or yy >= height:
                    continue
                
                blue, green, red = orgImg[yy, xx]
	
                if red < rMin:
                    rMin = red
                if green < gMin:
                    gMin = green
                if blue < bMin:
                    bMin = blue
        
        darkCh = min3(rMin, gMin, bMin)
        darkChImg[y, x] = darkCh
	
cv2.imwrite(saveFileName, darkChImg)
cv2.imshow('Original Image', orgImg)
cv2.imshow('Dark Channel(ohm={0})'.format(ohm), darkChImg)
	
cv2.waitKey(0)
cv2.destroyAllWindows()

図1(a) 画像canon7.jpg
図1(b) 画像canon7.jpgのダークチャネル(ohm=5)
図2(a) 画像kait20150701.png
図2(b) 画像kait20150701.pngのダークチャネル(ohm=5)