? ? ? 7月5号-6号,根据分配好的任务分工,我进行着查找验证有关图像处理以及骨干分割代码的工作。暂时筛选出5种图像分割的方法:
一.Entropy Method图像分割方法
计算前景和背景的信息熵,求最大熵。含义是经过阈值分割后图像的平均信息量越大愈好。
所使用的代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
import math
import os
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 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转灰度图像
H, best_k = Entropy(gray)
ret, thresh1 = cv2.threshold(gray, best_k, 255, cv2.THRESH_BINARY)
plt.imsave("D:/AllPycharmProjects/ImageRes/EM"+"/"+filename, thresh1, cmap="gray") # 保存图片
if __name__ == "__main__":
operateImages_path("./ImageOps")
图像结果:
二.FCM
处理结果:
三.K-means方法
处理结果:
四.熵算法
处理结果:
五.直方图法
处理结果:
总结:已有的这几个算法对图像的处理效果与我们的预期有些差距,还需要继续改进!
|