for i in range(len(self.gray_list)): Pi = self.gray_list[i] / self.N self.P_list.append(Pi) Avg_i = i * Pi self.Avg_list.append(Avg_i) self.Avg += Avg_i
for thr in range(len(self.gray_list)): P_fg = sum(self.P_list[:thr + 1]) P_bg = 1 - P_fg Avg_fg = sum(self.Avg_list[:thr + 1]) / P_fg if P_bg != 0: Avg_bg = (self.Avg - Avg_fg * P_fg) / P_bg det = P_fg * (Avg_fg - self.Avg) ** 2 + P_bg * (self.Avg - Avg_bg) ** 2 if det >= self.kdet: self.kdet, self.kt = det, thr print('图像分割阈值为%a' % self.kt) return self.kt
def b_w(self, t, j = True): """已计算得到的阈值为依据将图像转化为二进制图,j默认为True, 根据图片的实际情况选择""" if j: for i in range(self.pix_height): for j in range(self.pix_weight): if self.img_array[i][j] <= t: self.img_array[i][j] = 0 else: self.img_array[i][j] = 255 else: for i in range(self.pix_height): for j in range(self.pix_weight): if self.img_array[i][j] <= t: self.img_array[i][j] = 255 else: self.img_array[i][j] = 0 img = Image.fromarray(self.img_array) img.show() return self.img_array