网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 943|回复: 0
打印 上一主题 下一主题

Python基于直方图均衡化实现图片加强

[复制链接]

97

主题

98

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
跳转到指定楼层
楼主
发表于 2020-5-27 15:59:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过直方图的均衡化进行图像增加,需进行如下四个步骤:
1、计算图像的灰度直方图
2、计算灰度直方图的累加直方图
3、根据累加的直方图和直方图均衡化的原理得到输入灰度级与输出灰度级之间的映射关系
4、使用循环的方式得到输出图像的每一个像素的灰度级
实现的代码如下:

import cv2
import numpy as np

def calcGrayHist(image):
    rows,clos = image.shape
    grahHist = np.zeros([256],np.uint64)
    for r in range(rows):
        for c in range(clos):
            grahHist[image[r][c]] +=1
    return grahHist
   
if __name__ == "__main__":
    image = cv2.imread("D://python/p1.jpg", cv2.IMREAD_GRAYSCALE)
    rows,cols = image.shape
    grayHist = calcGrayHist(image)
    zeroCumuMoment = np.zeros([256], np.uint32)
    for p in range(256):
        if p == 0:
            zeroCumuMoment[p] = grayHist[0]
        else:
            zeroCumuMoment[p] = zeroCumuMoment[p-1] + grayHist[p]
    output = np.zeros([256],np.uint8)
    cofficient = 256.0/(rows*cols)
    for p in range(256):
        q = cofficient * float(zeroCumuMoment[p])-1
        if q >=0:
            output[p] = np.math.floor(q)
        else:
            output[p] = 0
    equalHistimg = np.zeros(image.shape,np.uint8)
    for r in range(rows):
        for c in range(cols):
            equalHistimg[r][c] = output[image[r][c]]
    cv2.imshow('image',image)
    cv2.imshow('histimage',equalHistimg)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-22 11:47 , Processed in 0.033871 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表