• 计算机视觉实验之直方图均衡化和对数变换


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

    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  对数变换后

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Nodejs exec和spawn的区别
    VC++每个版本对应的库
    在cmd启动一个win32程序,printf把信息输出到启运它的那个CMD窗口
    window 控制台解决中文乱码
    NW.js 桌面应用程序
    C++ Addon Async 异步机制
    Node bak
    nodejs electron 创建桌面应用
    跨平台桌面程序框架Electron
    js post 下载文件
  • 原文地址:https://www.cnblogs.com/ManbaDF99/p/10666284.html
Copyright © 2020-2023  润新知