⼀、双峰法介绍
1996年,Prewitt提出了直⽅图双峰法(2-Mode method),如下图所⽰,即如果图像灰度直⽅图呈明显的双峰状,则选取双峰间的最低⾕出作为图像 分割的阈值所在。即下图中,以Zt为阈值进⾏⼆值化分割,可以将⽬标和背景分割开。
注意:应⽤灰度直⽅图双峰法来分割图像,也需要⼀定的图像先验知识,因为同⼀个直⽅图可以对应若⼲个不同的图像,直⽅图只表明图像中各个灰度级上有多少个象素,并不描述这些象素的任何位置信息。 操作系统平台
该⽅法不适合直⽅图中双峰差别很⼤或双峰间的⾕⽐较宽⼴⽽平坦的图像,以及单峰直⽅图的情况。图像处理与模式识别
70年代初,研究⼯作集中在直⽅图变换,但⽆论是直⽅图还是直⽅图变换法都仅仅考虑了直⽅图灰度信息⽽忽略了图像的空间信息。但当图像的直⽅图出现波峰间的波⾕平坦、各区域直⽅图的波形重叠等情况时,⽤双峰法就很到合适的阈值。
⼆、python 源码
下⾯给出源代码。
这⾥为了⽅便这⾥为了⽅便,之间选取127作为分隔阈值,⽹上能到⼀些⾃动选择阈值的 ,后⾯也会介绍⼀些算法,⼤家感兴趣可以⾃⾏查。结果如下所⽰:
#coding:utf-8
import cv2
import numpy as np买断式回购
from matplotlib import pyplot as plt
image = cv2.imread("E:/python/cv/2ModeMethod/test.jpg")
人间 李锐gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
plt.subplot(131), plt.imshow(image, "gray")
plt.title("source image"), icks([]), icks([])
plt.subplot(132), plt.hist(image.ravel(), 256)
plt.title("Histogram"), icks([]), icks([])
KPI指标
ret1, th1 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
plt.subplot(133), plt.imshow(th1, "gray")
plt.title("2-Mode Method"), icks([]), icks([])
韩寒的杂志
plt.show()