山东大学暑期实训第五次记载(第二周第二次)

       7月7号,通过参考有关论文《基于小波变换与FCM的甲骨文字图像分割》,链接:https://d.wanfangdata.com.cn/periodical/tjqgyxyxb201806013,作者在进行实验时提到:

“3 幅 图像均采用二进小波基二 B 样条 小波进 行 1 二进小波分解. FCM 聚类分割类别数 c = 2 , 阈值 ε = 0.000 001 ,加 权指 m = 2 .”于是我们打算在进行图像分割算法前,再加个二进小波变换。
二进小波变换程序:
import numpy as np
import pywt
import cv2
import matplotlib.pyplot as plt
import os

def operateImages_path(file_pathname):
    #遍历处理该目录下的所有图片
    for filename in os.listdir(file_pathname):
        print(filename)
        img = cv2.imread(r""+file_pathname+"/"+filename)  # 读取图像(BGR)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转灰度图像
        coeffs = pywt.dwt2(gray, 'haar')
        cA, (cH, cV, cD) = coeffs

        plt.imsave("D:/AllPycharmProjects/ImageRes/BO" + "/" + filename, cV, cmap="gray")  # 保存图片

if __name__ == "__main__":
    operateImages_path("./ImageOps")

对Entropy Method图像分割方法改进如下:
import cv2
import numpy as np
import matplotlib.pyplot as plt
import math
import os
import pywt


def Entropy(gray):
    p = []  # 灰度概率

    H_last = 0  # 上一个H总熵
    best_k = 0  # 最佳阈值
    hist = cv2.calcHist([gray], [0], None, [256], [0, 256])  # 255*1的灰度直方图的数组
    for i in range(256):
        p.insert(i, hist[i][0] / gray.size)
    for k in range(256):
        H_b = 0  # black的熵,前景的平均信息量
        H_w = 0  # white的熵,背景的平均信息量
        for i in range(k):
            if p[i] != 0:
                H_b = H_b - p[i] * math.log(2, p[i])

        for i in range(k, 256):
            if p[i] != 0:
                H_w = H_w - p[i] * math.log(2, p[i])

        H = H_b + H_w
        if H > H_last:
            H_last = H
            best_k = k

    return H, best_k

def operateImages_path(file_pathname):
    #遍历处理该目录下的所有图片
    for filename in os.listdir(file_pathname):
        print(filename)
        img = cv2.imread(r""+file_pathname+"/"+filename)  # 读取图像(BGR)
        gray = img
        #gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转灰度图像
        #coeffs = pywt.dwt2(gray, 'haar')
        #cA, (cH, cV, cD) = coeffs

        H, best_k = Entropy(gray)
        ret, thresh1 = cv2.threshold(gray, best_k, 255, cv2.THRESH_BINARY)
        plt.imsave("D:/AllPycharmProjects/ImageRes/EMBO"+"/"+filename, thresh1, cmap="gray")  # 保存图片

if __name__ == "__main__":
    #operateImages_path("./ImageOps")
    operateImages_path("D:/AllPycharmProjects/ImageRes/BO")

二进小波变换程序运行结果如下:

之后运行Entropy Method图像分割方法,结果如下:

结果比没加二进小波变换相比更差了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值