目录
1. 介绍
2. 固定阈值处理
1. 介绍
图像分割就是将图像分成不同的区域,每个区域满足相似的条件。通常,都是将图像分为两个区域:前景区域和背景区域。
前景就是人们感兴趣的位置,例如一副Lena图像,我们只对这副图像的人物感兴趣,将它们分为一类,这里不注重对人物的细节,只看重大体的轮廓
背景就是不感兴趣的位置,Lena人物旁边的物体全都是可有可无的,那么这里就认为这些都是背景区域。注意:背景区域里面的细节就表现为强的噪声
通常将前景设置为255,背景设置为0,这样一副图像就只有255和0两个灰度值,那么这就是一副二值图像。
这里没有采用1和0的原因,是1和0区分不大,人眼区别不出
这里的二值图像不是说用1bit保存图像,而是用8bit,也就是灰度级为256的灰度分辨率保存。在256个灰度值中,我们只使用了0(黑色)作为背景,255(白色)作为前景这两个灰度值
根据图像分割的原理可以将图像算法归结为两种:相似性和不连续性
不连续性是根据不同区域之间像素点灰度值差异过大,例如边缘检测
相似性是利用相同区域之间灰度值差别不大,例如阈值分割
之前介绍过,阈值处理其实就是灰度切割的一种特殊使用,具体的可以看之前的文章:
灰度变换 - 灰度切割(灰度级分层)+threshold函数https://blog.csdn.net/qq_44886601/article/details/127377121
2. 固定阈值处理
由于图像阈值处理直观、实现简单、计算快等优点,因此在图像分割应用中处于核心的位置
所谓的固定阈值,就是阈值是人为设定的不变的
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('./img.png',0)
dst = np.zeros(img.shape,dtype=np.uint8)
dst[(img > 150) & (img < 240)] = 255 # 前景区域
dst[(img <= 150) | (img >= 240)] = 0 # 背景区域
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
处理结果:
这里阈值处理的关键点是如何选取阈值的点
一种方法是通过观察图像的直方图,如果大概的直方图结果有明显的谷点,那么就可以根据谷点将图像进行阈值处理。但是这种方法实现较为困难,一个是具有这种直方图的图像并不常见,一个是这种方法很容易受噪声影响
另一种就是设定一个阈值,然后将图像分类成两个区域,根据算法将两个区域之间的差异保持到最大。例如:Otsu