从图像统计特征看图像内在-均值,方差,对比度,熵

这篇具有很好参考价值的文章主要介绍了从图像统计特征看图像内在-均值,方差,对比度,熵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图像统计特征

用于度量图像所具有的信息量,它反映了图像中纹理的紊乱度或复杂程度。熵值越大,说明纹理越复杂;熵值越小,说明纹理越平滑。

均值

灰度均值是对区域内亮度的一个度量,可以用来反应图像的明暗程度。

方差

方差就是数据的分散程度(偏离均值)。

对比度

反映了图像的清晰度和纹理沟纹深浅的程度。纹理沟纹越深,其对比度越大,视觉效果越清晰;反之,对比度小,则沟纹浅,效果模糊。

公式

图像方差,图像处理,python,opencv,目标检测

测试图片-从均值、方差做对比

图像方差,图像处理,python,opencv,目标检测
图像方差,图像处理,python,opencv,目标检测
对于第一组六张图片,图片越辆均值越大,但方差不会改变(同一张图片只改变亮度)
对于第二组图片,对比度不做调节,只调节亮度的情况下,偏离均值的离散度会变大

图像方差,图像处理,python,opencv,目标检测

测试图片-从对比度出发

对比度越大 视觉效果越清晰;纹理越深对比度越大

图像方差,图像处理,python,opencv,目标检测
图像方差,图像处理,python,opencv,目标检测

测试图片-从熵出发

熵值越大,说明纹理越复杂;熵值越小,说明纹理越平滑。
图像方差,图像处理,python,opencv,目标检测
图像方差,图像处理,python,opencv,目标检测文章来源地址https://www.toymoban.com/news/detail-593822.html

img_1 = cv2.imread('office_1.jpg')
img_2 = cv2.imread('office_2.jpg')
img_3 = cv2.imread('office_3.jpg')
img_4 = cv2.imread('office_4.jpg')
img_5 = cv2.imread('office_5.jpg')
img_6 = cv2.imread('office_6.jpg')
img_7 = cv2.imread('dalishi.jpg')
img_8 = cv2.imread('wall.jpg')
img_9 = cv2.imread('muwen.jpg')
img_10 = cv2.imread('shuiniwen.jpg')
img_11 = cv2.imread('400x400_zhi_wenli.jpg')
img_12 = cv2.imread('400x400_zhi_zhezhouwenli.jpg')
imgs = [img_1,img_2,img_3,img_4,img_5,img_6]
titles = ['office_1.jpg','office_2.jpg','office_3.jpg','office_4.jpg','office_5.jpg','office_6.jpg']
for m in range(6):
    plt.subplot(2,3,m + 1)
    plt.imshow(imgs[m])
    plt.title(titles[m])
def rgb2gray(img):
    h = img.shape[0]
    w = img.shape[1]
    gray = np.uint8(np.zeros((h,w)))
    for i in range(h):
        for j in range(w):
            gray[i,j] = 0.144 * img[i,j,0] + 0.587 * img[i,j,1] + 0.299 * img[i,j,2]  # BGR
    return gray
def average(img):
    img1 = rgb2gray(img)
    height,width = img1.shape
    size = img1.size
    ave = 0
    for i in range(height):
        for j in range(width):
            ave += img1[i][j] / size
    return ave
def contrast(img):
    img1 = rgb2gray(img)
    m,n = img1.shape
    # 图片矩阵向外扩展一个像素
    img1_ext=cv2.copyMakeBorder(img1,1,1,1,1,cv2.BORDER_REPLICATE)  # 用边界颜色填充
    height,width = img1_ext.shape
    b = 0.0
    for i in range(1,height - 1):
        for j in range(1,width - 1):
            b += (int((img1_ext[i,j]) - int(img1_ext[i,j + 1])) ** 2 + (
                    int(img1_ext[i,j]) - int(img1_ext[i,j - 1])) ** 2 + (
                          int(img1_ext[i,j]) - int(img1_ext[i + 1,j])) ** 2 + (
                          int(img1_ext[i,j]) - int(img1_ext[i - 1,j])) ** 2)
    cg = b / (4 * (m - 2) * (n - 2) + 3 * (2 * (m - 2) + 2 * (n - 2)) + 2 * 4)  #
    return cg
def variance(img):
    img1 = rgb2gray(img)
    height,width = img1.shape
    var = 0
    size = img1.size
    average = 0
    for i in range(height):
        for j in range(width):
            average += img1[i][j] / size
    for i in range(height):
        for j in range(width):
            var += img1[i,j] * (i - average) ** 2
    return var
def Contrast_and_Brightness(alpha,bete,img):  
    blank = np.zeros(img.shape,img.dtype)
    dst = cv2.addWeighted(img,alpha,blank,1 - alpha,bete)
    return dst
def dec2bin(p):
    floatbinstr = ""
    if p == 0:
        return floatbinstr
    for kk in range(len(str(p)) - 2):
        p *= 2
        if p > 1:
            floatbinstr += "1"
            p = p - int(p)
        else:
            floatbinstr += "0"
        if p == 0:
            break
        return str(floatbinstr)
def total_entropy(img):
    n = []
    P = []
    lenavg = []
    avg_sum = 0
    grey_lvl = 0
    k = 0
    res = 0
    # test = [[5,4,3,2,1]]
    weight = img.shape[0]
    height = img.shape[1]
    total = weight * height
    for i in range(256):
        n.append(0)
    for i in range(weight):
        for j in range(height):
            grey_lvl = img[i][j]
            n[grey_lvl] = float(n[grey_lvl] + 1)
            k = float(k + 1)
    for i in range(256):
        P.append(0)
    P = n
    for i in range(len(n)):
        P[i] = (n[i] / k)
    for i in range(256):
        lenavg.append(0)
    lenavg = P
    for i in range(len(n)):
        if P[i] == 0.0:
            continue
        lenavg[i] = lenavg[i] * len(dec2bin(lenavg[i]))
        avg_sum = lenavg[i] + avg_sum
    for i in range(len(n)):
        if (P[i] == 0):
            res = res
        else:
            res = float(res - P[i] * (math.log(P[i]) / math.log(2.0)))
    return res
if __name__ == '__main__':
    if input(keyboard.wait('A')):
        for i in range(6):
            ave_1 = average(imgs[i])
            ave_1 = Decimal(ave_1).quantize(Decimal("0.000"))
            print("average_office" + "_" + "123456"[i],ave_1)
            with open('E:\\untitled12\\image_practice\\entropy.txt','a',encoding='utf-8') as f:
                f.write('{:^30}\n'.format(str(ave_1)))
                f.close()
        plt.show()
    if input(keyboard.wait('V')):
        for i in range(6):
            var_1 = variance(img_1)
            var_1 = Decimal(var_1).quantize(Decimal("0.000"))
            print("variance_office" + "_" + "123456"[i],var_1)
        img_contrast = Contrast_and_Brightness(2.0,0,img_1)
        var_orign = variance(img_1)
        var_con = variance(img_contrast)
        print("原图:       ",var_orign)
        print("原图调节对比:",var_con)
        plt.subplot(1,2,1),plt.imshow(img_1),plt.title('img_1')   plt.subplot(1,2,2),plt.imshow(img_contrast),plt.title('img_contrast')
    plt.show()
    if input(keyboard.wait('C')):
        con_1 = contrast(img_1)
        plt.subplot(2,2,1),plt.imshow(img_1),plt.title('bangong')

        img_GAUSS = cv2.GaussianBlur(img_1,(9,9),0)
        con_2 = contrast(img_GAUSS)
        plt.subplot(2,2,2),plt.imshow(img_GAUSS),plt.title('bangong_GUSS')
        con_3 = contrast(img_9)
        plt.subplot(2,2,3),plt.imshow(img_9),plt.title('mu_wen')
        con_4 = contrast(img_10)
        plt.subplot(2,2,4),plt.imshow(img_10),plt.title('shui_ni_wen')

        con_1 = Decimal(con_1).quantize(Decimal("0.000"))
        con_2 = Decimal(con_2).quantize(Decimal("0.000"))
        print("contrast_office" + "_oringel",con_1)
        print("contrast_office" + "_GAUSS  ",con_2)

        con_3 = Decimal(con_3).quantize(Decimal("0.000"))
        con_4 = Decimal(con_4).quantize(Decimal("0.000"))
        print("木纹  ",con_3)
        print("水泥纹",con_4)
    plt.show()

    if input(keyboard.wait('E')):
        img_grey = cv2.imread('dalishi.jpg',cv2.IMREAD_GRAYSCALE)
        img_grey1 = cv2.imread('wall.jpg',cv2.IMREAD_GRAYSCALE)
        img_grey2 = cv2.imread('muwen.jpg',cv2.IMREAD_GRAYSCALE)

        img_wenli = cv2.imread('400x400_zhi_wenli.jpg',cv2.IMREAD_GRAYSCALE)
        img_wenli1 = cv2.imread('400x400_zhi_zhezhouwenli.jpg',cv2.IMREAD_GRAYSCALE)

        ent_dalishi = total_entropy(img_grey)
        plt.subplot(1,3,1),plt.imshow(img_7)
        ent_wall = total_entropy(img_grey1)
        plt.subplot(1,3,2),plt.imshow(img_8)
        ent_muwen = total_entropy(img_grey2)
        plt.subplot(1,3,3),plt.imshow(img_9)

        ent_wenli = total_entropy(img_wenli)
        plt.subplot(1,2,1),plt.imshow(img_11),plt.title('junyun_weli')
        ent_wenli1 = total_entropy(img_wenli1)
        plt.subplot(1,2,2),plt.imshow(img_12),plt.title('not_junrun_wen')

        print("entropy_dalishi",ent_dalishi)
        print("entropy_wall   ",ent_wall)
        print("entrop_muwen   ",ent_muwen)

        print("E_junrun_wenli:        ",ent_wenli)
        print("E_NOT_junrun_wenli1:   ",ent_wenli1)
    plt.show()

到了这里,关于从图像统计特征看图像内在-均值,方差,对比度,熵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV增加图像的亮度及对比度

    案例:输出一张原图,增加该图片的亮度及对比度 基本概念: 亮度:RGB的像素值范围是0~255,我们称从0——255随着像素值的增加图像会越来月亮,反之会越来越暗。所以我们可以通过对图像像素加减来改变图像的亮度。 对比度:其反应的是图像中各像素的差异(层次感、落

    2024年02月12日
    浏览(46)
  • OpenCV改变图像的对比度和亮度

    在本教程中,您将学习如何: 访问像素值 用零初始化矩阵 了解 cv::saturate_cast 的作用以及它为什么有用 获取有关像素转换的一些很酷的信息 在实际示例中提高图像的亮度 注意 下面的解释属于Richard Szeliski的《计算机视觉:算法和应用》一书 图像处理 一般图像处理算子是

    2024年02月21日
    浏览(53)
  • 数字图像处理:亮度对比度-几何变换-噪声处理

    亮度与对比度转换 图像变换可分为以下两种: 点算子:基于像素变换,在这一类图像变换中,仅仅根据输入像素值计算相应的输出像素值 邻域算子:基于图像区域进行变换 两种常用的点算子是用常数对点的像素值进行乘法或加法运算,可以表示为: g ( i , j ) = α ∗ f ( i ,

    2024年02月10日
    浏览(61)
  • OpenCvSharp学习笔记6--改变图像的对比度和亮度

    访问像素值mat.AtT(y,x) 用0初始化矩阵Mat.Zeros 饱和操作SaturateCast.ToByte g(x)=αf(x)+β 用α(0)和β一般称作增益(gain)和偏置(bias),分别控制对比度和亮度 把f(x)看成源图像像素,把g(x)看成输出图像像素 g(i,j)=α⋅f(i,j)+β 其中,i和j表示像素位于 第i行 和 第j列(左上角为第0行、第0列) M

    2024年02月03日
    浏览(62)
  • Python OpenCV调整图像亮度对比度及RGB色彩

    python通过opencv库调整图像的步骤: 1. 读取图像 直接通过cv2库读取图像,可以读取jpg, png等格式 2. 调整图像亮度及对比度 OpenCV提供 convertScaleAbs 函数来调整对比度和亮度,可以直接调用该函数 如果只调整RGB颜色通道,则可以忽略此步骤 3. 分离出图片的B,R,G颜色通道 使用

    2024年02月03日
    浏览(48)
  • Python图像处理:1.插值、频域变换与对比度增强

    7.图像的插值 (1)原理介绍 下面对比三种插值方法,分别是最近邻插值法、双线性插值法、卷积插值法,三种方法的前提和特点、优缺点、适用场景如下: 最近邻插值(Nearest Neighbor Interpolation) : 前提与特点 :这是最简单的插值方法,不考虑相邻像素的影响,只取最近的像

    2024年03月13日
    浏览(64)
  • C#使用OpenCv(OpenCVSharp)图像处理实例:亮度、对比度、灰度

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行亮度、对比度、灰度处理。 目录 亮度和对比度原理 灰度 实例 图像亮度通俗理解便是图像的明暗程度,数字图像 f(x,y) = i(x,y) r(x, y) ,如果灰度值在[0,255]之间,则 f 值越接近0亮度越低,f 值越接近255亮度越

    2024年02月13日
    浏览(76)
  • 【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...

    这段代码是使用C++和OpenCV库编写的图像处理程序,其主要功能是 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。 用户可以通过界面上的滑动条来动态地调整亮度和对比度参数从而观察到图像即时的变化效果。程序首先读取并显示一个灰度图像

    2024年04月10日
    浏览(49)
  • Opencv C++图像处理:亮度+对比度+饱和度+高光+暖色调+阴影+漫画效果+白平衡+浮雕+羽化+锐化+颗粒感

    更多详细信息请看:OpenCV专栏:翟天保Steven

    2024年02月04日
    浏览(55)
  • 视频增强技术-对比度增强

            在图像处理中,由于获取的图像质量不好,需要通过对比度增强来提升图片质量,主要解决的是由于图像灰度级范围较小造成的对比度较低的问题,作用是使图像的灰度级范围放大,从而让图像更加清晰。主要对比度增强方法包括线性变换、直方图正规化、伽马变

    2024年02月10日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包