• 直方图正规化


    概念和原理

    直方图正规化是一种自动选取 a 和 b 的值的线性变换方法

    假设输入图像为 I,高为 H、 宽为 W, I (r, c) 代表 I 的第 r 行第 c 列的灰度值, 将I中出现的最小灰度级记为Imin, 最大灰度级记为Imax,即 I (r, c) ∈[ I min, Imax], 为使输出图像 O 的灰度级范围为[ Omin, Omax], I (r, c) 和 O( r, c) 做以下映射关系:
    (O(r,c) = frac{O_{max}-O_{min}}{I_{max}-I_{min}}(I(r, c) - I_{min}) + O_{min})
    其中,
    (a=frac{O_{max}-O_{min}}{I_{max}-I_{min}}), (b=O_{min}-frac{O_{max}-O_{min}}{I_{max}-I_{min}}*I_{min})

    代码

    1、若输入是 8 位图 ,一般设置 O_min = 0,O_max = 255
    2、若输入的是归一化的图像,一般设置 O_min = 0,O_max = 1

    # !/usr/bin/env python
    # -*-encoding: utf-8-*-
    # author:LiYanwei
    # version:0.1
    
    import numpy as np
    import cv2
    import matplotlib.pyplot as plt
    
    
    def histNormalized(InputImage,O_min = 0,O_max = 255):
        I_min = np.min(InputImage)
        I_max = np.max(InputImage)
        rows,cols = InputImage.shape
        #输出图像
        OutputImage = np.zeros(InputImage.shape,np.float32)
        #输出图像的映射
        cofficient = float(O_max - O_min)/float(I_max - I_min)
        for r in range(rows):
            for c in range(cols):
                OutputImage[r][c] = cofficient*( InputImage[r][c] - I_min) + O_min
        return OutputImage
    
    
    if __name__ =="__main__":
        image = cv2.imread('img3.jpg', cv2.IMREAD_GRAYSCALE)
        #显示原图
        cv2.imshow("image", image)
        #直方图正规化
        histNormResult = histNormalized(image)
        #数据类型转换,灰度级显示
        histNormResult = np.round(histNormResult)
        histNormResult = histNormResult.astype(np.uint8)
        #显示直方图正规化的图片
        cv2.imshow("histNormlized", histNormResult)
        cv2.imwrite("histNormResult.jpg", histNormResult)
    
  • 相关阅读:
    UVA 12467
    UVA 12604
    部署ASP.NET MVC项目
    以路由控制URL
    Week13(12月2日):又到了那个点,期末了~~~~
    购物网站讨论5:会员功能的实现
    购物网站讨论4:订单结账功能实现
    购物网站讨论3:购物车功能实现
    购物网站讨论2:商品浏览功能实现
    购物网站讨论1:关于模型那些事
  • 原文地址:https://www.cnblogs.com/Py00/p/8927363.html
Copyright © 2020-2023  润新知