zoukankan      html  css  js  c++  java
  • 计算机视觉实验之直方图均衡化和对数变换

    这篇简单的文章主要是针对我们老师布置的实验作业做的一些简单总结。不足之处,请指正。

    1.实验题目

    1.1 直方图均衡化

    1.2对数变换

    2.实验内容

    2.1 直方图均衡化

    2.1.1 实验目的

    利用图像直方图对对比度进行调整的方法,使得变换后的图像直方图均匀分布,增加了图像的全局对比度,图像也就越清晰,色彩也就越丰富。

    2.1.2 实验步骤

    n  统计灰度直方图

    n  求出对应的概率密度

    n  求对应的累积概率

    n  求出每个灰度级对应的输出灰度级

    n  映射到新的图像

    2.1.3 实现代码

     import numpy as np

    #import cv2
    from PIL import Image
    from pylab import *
    import matplotlib.pyplot as plt
    mpl.rcParams['font.sans-serif']=['SimHei']
    def grayhis(img):
        a = [0]*256            #存储图像的灰度值像素
        sum_all=row*column
        for i in range(row):
            for j in range(column):
                gray = img[i][j]
              #  print(gray)
                a[gray]+= 1       #计算不同灰度值的频数
              # sum_all+=a[gray]
        #print(a)
        print("总数为:",sum_all)
        x=[i for i in range(256)]
        y=a
        plt.figure()
        plt.title("图像像素直方图")
        plt.xlabel("频数")
        plt.ylabel("像素")
        plt.plot(x,y)
        plt.xlim([0,256])
        return sum_all,a
    def equalization(a,img,sum_all):
        b=[0]*256 #对应的频率密度
        c=[0]*256 #对应的累计密度转换得到的灰度值数组
        for i in range(0,256):
            b[i]=a[i]/sum_all
            print("值为:",b[i])
        for i in range(0,256):
            for j in range(i):
                c[i] +=b[j]
            c[i]=c[i]*255
            print("映射所得灰度:",c[i])
        #映射后的灰度值向上取整
        for i in range(row):
            for j in range(column):
                img[i][j]=int(c[img[i][j]])
        return img
    img=Image.open("mountain.jpg")
    img=np.array(img)
    print(type(img))
    print(img)
    row, column = img.shape[0], img.shape[1]
    print(row, column)
    sum_all,a=grayhis(img)
    plt.figure()
    plt.imshow(img,cmap='gray')
    plt.show()
    img1=equalization(a,img,sum_all)
    plt.imshow(img1,cmap='gray')
    plt.show()

    2.1.4 结果展示

    l  原图

     

    l  直方图均衡化后

     

    2.2 对数变换

    2.2.1 实验目的

    对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的细节;将其高灰度值部分压缩,减少高灰度值部分的细节,从而达到强调图像低灰度部分的目的。对数变换对于整体对比度偏低、灰度值偏低的图像增强效果较好。

    2.2.2 实验步骤

    利用变换公式  调整图像每个像素点的灰度值。

    2.2.3 实现代码

    import numpy as np
    from PIL import Image
    import matplotlib.pyplot as plt
    import math
    img=Image.open("city.jpeg")
    img=np.array(img)
    print(type(img))
    print(img)
    c=255/np.log(256)
    row, column = img.shape[0], img.shape[1]
    print(row, column)
    plt.figure()
    plt.imshow(img,cmap='gray')
    plt.show()

    for i in range(row):
        for j in range(column):
            img[i][j]=c*np.log(1+img[i][j])
    plt.imshow(img,cmap='gray')
    plt.show()

    2.2.4 结果展示

    l  原图

    l  对数变换后

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    hadoop 之 kafka 安装与 flume -> kafka 整合
    软考倒计时28天:项目一般管理
    HACMP5.4常用命令
    db2还原离线备份文件报错SQL2071N 提示“访问共享库出现错误”解决
    远程桌面不能拷贝文件的问题
    ubuntu设置开机启动命令行模式
    Rainmeter如何打开控制面板的小程序
    /var/adm/wtmp文件太大该怎么办?
    SQL1221N The Application Support Layer heap cannot be allocated. SQLSTATE=57011
    DB21019E An error occurred while accessing the directory "/root".
  • 原文地址:https://www.cnblogs.com/ManbaDF99/p/10666284.html
Copyright © 2011-2022 走看看