直方图规定化_Python OpenCV 直方图匹配

直方图匹配是图像增强的一种方法,通过调整图像直方图使其符合特定形状。本文介绍了使用Python的OpenCV库进行直方图匹配的两种技术,包括基本的直方图匹配和针对灰度图的优化处理。
摘要由CSDN通过智能技术生成

直方图匹配又称为直方图规定化,是指将一幅图像的直方图变成规定形状的直方图而进行的图像增强方法。即将某幅影像或某一区域的直方图匹配到另一幅影像上。将图像的直方图分布规律与待匹配图像的脂肪分布规律近似。下面介绍两种方法:

1. 直方图匹配

def style_transfer(image, ref):
    out = np.zeros_like(ref)
    _, _, ch = image.shape
    for i in range(ch):
        print(i)
        hist_img, _ = np.histogram(image[:, :, i], 256)
        hist_ref, _ = np.histogram(ref[:, :, i], 256)
        cdf_img = np.cumsum(hist_img)
        cdf_ref = np.cumsum(hist_ref)

        for j in range(256):
            tmp = abs(cdf_img[j] - cdf_ref)
            tmp = tmp.tolist()
            idx = tmp.index(min(tmp))  # 找出tmp中最小的数,得到这个数的索引
            out[:, :, i][ref[:, :, i] == j] = idx
    return out

out = style_transfer(img, ref)

hist_img = cv2.calcHist([img], [0], None, [255], [0, 255])
hist_ref = cv2.calcHist([ref], [0], None, [255], [0, 255])
hist_out = cv2.calcHist([out],
OpenCV直方图规定化是一种将一张图像直方图匹配到另一张图像的直方图方法。这种方法可以用于图像增强、图像匹配等领域。在Python中,可以使用cv2.normalize()函数来实现直方图规定化。具体步骤如下: 1. 读取原始图像和目标图像。 2. 计算原始图像和目标图像的直方图。 3. 计算原始图像和目标图像的累积分布函数(CDF)。 4. 将原始图像的CDF映射到目标图像的CDF上,得到映射函数。 5. 使用映射函数将原始图像的像素值映射到目标图像的像素值上,得到规定后的图像。 下面是一个简单的Python代码示例,演示了如何使用OpenCV进行直方图规定化: ``` import cv2 import numpy as np # 读取原始图像和目标图像 src_img = cv2.imread('src_img.jpg', 0) dst_img = cv2.imread('dst_img.jpg', 0) # 计算原始图像和目标图像的直方图 src_hist = cv2.calcHist([src_img], [0], None, [256], [0, 256]) dst_hist = cv2.calcHist([dst_img], [0], None, [256], [0, 256]) # 计算原始图像和目标图像的累积分布函数(CDF) src_cdf = np.cumsum(src_hist) src_cdf_normalized = src_cdf * float(src_hist.max()) / src_cdf.max() dst_cdf = np.cumsum(dst_hist) dst_cdf_normalized = dst_cdf * float(dst_hist.max()) / dst_cdf.max() # 将原始图像的CDF映射到目标图像的CDF上,得到映射函数 lut = np.interp(src_cdf_normalized, dst_cdf_normalized, range(256)) # 使用映射函数将原始图像的像素值映射到目标图像的像素值上,得到规定后的图像 dst_img_normalized = cv2.LUT(src_img, lut) # 显示原始图像、目标图像规定后的图像 cv2.imshow('src_img', src_img) cv2.imshow('dst_img', dst_img) cv2.imshow('dst_img_normalized', dst_img_normalized) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值