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

图像统计特征

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

均值

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

方差

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

对比度

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

公式

请添加图片描述

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

在这里插入图片描述
在这里插入图片描述
对于第一组六张图片,图片越辆均值越大,但方差不会改变(同一张图片只改变亮度)
对于第二组图片,对比度不做调节,只调节亮度的情况下,偏离均值的离散度会变大

在这里插入图片描述

测试图片-从对比度出发

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

在这里插入图片描述
在这里插入图片描述

测试图片-从熵出发

熵值越大,说明纹理越复杂;熵值越小,说明纹理越平滑。
在这里插入图片描述
在这里插入图片描述

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()
  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MATLAB金融工具箱中的均值方差模型是一种常用的资产组合优化方法,它帮助投资者在给定一组资产的情况下,找到一个最优的资产配置方案。该模型基于资本资产定价模型(Capital Asset Pricing Model,CAPM)的理论,旨在最大化投资组合的预期收益,同时将投资风险降到最低。 均值方差模型的思想是通过计算资产收益率的均值方差来评估投资组合的表现。首先,我们需要通过历史数据或者预测模型来估计每个资产的收益率和风险。然后,根据投资者的偏好设置权重,即每个资产在投资组合中的比例。接下来,利用资产收益率和权重计算整个投资组合的预期收益率和方差。 MATLAB金融工具箱提供了一系列函数,包括meanvar模型函数,可以帮助我们对资产进行均值方差模型的分析。我们可以使用该函数输入资产收益率数据,并设置投资者的风险厌恶程度。最后,该函数会输出最优的资产配置比例,以及投资组合的预期收益率和方差。 使用均值方差模型可以帮助投资者做出理性的资产配置决策。通过权衡不同资产的预期收益和风险,投资者可以根据自身的投资目标和偏好选择合适的资产组合,从而实现预期的收益最大化或者风险最小化。而MATLAB金融工具箱的均值方差模型功能,为投资者提供了方便快捷的工具,帮助他们分析和优化投资组合。 需要注意的是,均值方差模型假设资产收益率服从正态分布,并且忽略了其他可能的风险因素。因此,在实际应用中,投资者还需要考虑其他因素,如流动性风险、市场风险等,并适当调整模型的输入参数,以更准确地评估资产组合的表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leon在努力啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值