OpenCV-Python 彩色图像均衡化与规定化

彩色图像均衡化

在HSI空间对亮度分量进行均衡化

def method_one():
    img = cv2.imread('../assets/Fig6.png')
    his = cv2.cvtColor(img, cv2.COLOR_RGB2HLS)
    cv2.imshow('img', img)
    his_i = his[:, :, 1]
    equal_i = cv2.equalizeHist(hsl_i)
    his[:, :, 1] = equal_i
    dst = cv2.cvtColor(his, cv2.COLOR_HLS2BGR)
    cv2.imshow('dst', dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

在这里插入图片描述

对彩色图像的R,G,B三通道进行均衡化

	def method_two():
	    img = cv2.imread('../assets/Fig6.png')
	    (b, g, r) = cv2.split(img)
	    equal_b = cv2.equalizeHist(b)
	    equal_g = cv2.equalizeHist(g)
	    equal_r = cv2.equalizeHist(r)
	    dst = cv2.merge((equal_b, equal_g, equal_r))
	    cv2.imshow('img', img)
	    cv2.imshow('dst', dst)
	    cv2.waitKey(0)
	    cv2.destroyAllWindows()

在这里插入图片描述

对彩色图像进行规定话

现在有两幅图,FigA 和 FigB,现在要对FigA进行规定化,使FigA 图像的直方图规范化最接近FigB的情况。

def method_three():
    img = cv2.imread('../assets/Fig6A.jpg')
    dst = cv2.imread('../assets/Fig6B.jpg')
    def_img = cv2.imread('../assets/Fig6A.jpg')
    color = ('b', 'g', 'r')
    for i, col in enumerate(color):
        hist1, bins = np.histogram(img[:, :, i].ravel(), 256, [0, 256])
        hist2, bins = np.histogram(dst[:, :, i].ravel(), 256, [0, 256])
        # 获得累计直方图
        cdf1 = hist1.cumsum()
        cdf2 = hist2.cumsum()
        # 归一化处理
        cdf1_hist = hist1.cumsum() / cdf1.max()
        cdf2_hist = hist2.cumsum() / cdf2.max()

        # diff_cdf 里是每2个灰度值比率间的差值
        diff_cdf = [[0]*256 for i in range(256)]
        for j in range(256):
            for k in range(256):
                diff_cdf[j][k] = abs(cdf1_hist[j] - cdf2_hist[k])
        # FigA 中的灰度级与目标灰度级的对应表
        lut = np.zeros((256,2), dtype=np.int)
        for j in range(256):
            squ_min = diff_cdf[j][0]
            index = 0
            for k in range(256):
                if squ_min > diff_cdf[j][k]:
                    squ_min = diff_cdf[j][k]
                    index = k
            lut[j] = ([j, index])

        h = int(img.shape[0])
        w = int(dst.shape[1])
        # 对原图像进行灰度值的映射
        for j in range(h):
            for k in range(w):
                def_img[j, k, i] = lut[img[j, k, i]][1]

    cv2.namedWindow('Fig6A', 0)
    cv2.resizeWindow('Fig6A', 400, 520)
    cv2.namedWindow('Fig6B', 0)
    cv2.resizeWindow('Fig6B', 400, 520)
    cv2.namedWindow('def', 0)
    cv2.resizeWindow('def', 400, 520)
    cv2.imshow('Fig6A', img)
    cv2.imshow('Fig6B', dst)
    cv2.imshow('def', def_img)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hack Rabbit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值