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图像分割方法,结果如下:
结果比没加二进小波变换相比更差了!