北京企业网站备案需要多久,做网站域名需要在哪里备案,网站备案怎么找人备,企业网站的功能有哪些欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】163. 基于边缘信息改进全局阈值处理 3.4 全局阈值处理改进方法
在实际的图像处理中#xff0c;噪声严重影响阈值处理的结果持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】163. 基于边缘信息改进全局阈值处理 3.4 全局阈值处理改进方法
在实际的图像处理中噪声严重影响阈值处理的结果严重的噪声会把简单的阈值处理问题变为不能解决的问题。
例程 11.20基于边缘信息改进全局阈值处理
对于大背景中的小目标图像的直方图受到背景的大波峰控制即由于背景内容太多而将目标在直方图中淹没了使全局阈值处理容易失败。
如果只利用接近目标和背景之间的边缘的像素忽略无效的背景区域像素对直方图的贡献可以改善直方图的分布从而便于通过阈值处理进行分割。
具体步骤如下
1计算图像 f(x,y)f(x,y)f(x,y) 的梯度算子得到梯度幅值图像
2对梯度幅值图像进行二值处理选取强边缘像素作为遮罩模板 gT(x,y)g_T(x,y)gT(x,y)以排除无效背景像素的影响
3基于遮罩模板计算图像 f(x,y)f(x,y)f(x,y) 的直方图分布即只对 gT(x,y)1g_T(x,y)1gT(x,y)1 的像素进行统计计算
4由基于遮罩模板的直方图找到适当的分割阈值对图像 f(x,y)f(x,y)f(x,y) 进行全局阈值处理。 # 11.20 基于边缘信息改进全局阈值处理img cv2.imread(../images/Fig1041a.tif, flags0)# # 全局阈值处理作为参照比较histCV1 cv2.calcHist([img], [0], None, [256], [0, 256]) # 灰度直方图totalPixels img.shape[0] * img.shape[1] # 像素总数totalGray np.dot(histCV1[:,0], range(256)) # 内积, 总和灰度值meanGray round(totalGray/totalPixels) # 平均灰度ret, imgBin cv2.threshold(img, meanGray, 255, cv2.THRESH_BINARY) # threshmeanGray# (1) 计算 Sobel 梯度算子SobelX cv2.Sobel(img, cv2.CV_32F, 1, 0) # 计算 x 轴方向SobelY cv2.Sobel(img, cv2.CV_32F, 0, 1) # 计算 y 轴方向grad np.sqrt(SobelX**2 SobelY**2)gradMax np.int(np.max(grad))# (2) 设置阈值 T0.3*gradMax对梯度图像进行阈值处理作为遮罩模板_, maskBW cv2.threshold(np.uint8(grad), 0.3*gradMax, 255, cv2.THRESH_BINARY)# (3) 计算基于遮罩模板的直方图分布以排除无效背景像素的影响histCV2 cv2.calcHist([img], [0], maskBW, [256], [0, 256])histCV2[0] 0# (4) 排除无效背景像素影响后进行阈值处理Tmask 120 # 观察直方图 histCV2找到分割阈值_, imgBin2 cv2.threshold(img, Tmask, 255, cv2.THRESH_BINARY)print(gradMax, meanGray)plt.figure(figsize(9,6))plt.subplot(231), plt.axis(off), plt.title(Origin), plt.imshow(img, gray)plt.subplot(232,yticks[]), plt.axis([0,255,0,np.max(histCV1)])plt.bar(range(256), histCV1[:,0]), plt.title(Gray Hist)plt.subplot(233), plt.axis(off), plt.title(Binary), plt.imshow(imgBin, gray)plt.subplot(234), plt.axis(off), plt.title(Threshold of Sobel)plt.imshow(maskBW, cmapgray)plt.subplot(235, yticks[]), plt.title(Hist of boundries) # 直方图plt.bar(range(256), histCV2[:,0])plt.subplot(236), plt.axis(off), plt.title(Binary by edge improved)plt.imshow(imgBin2, gray)plt.tight_layout()plt.show()本节完 版权声明
youcansxupt 原创作品转载必须标注原文链接(https://blog.csdn.net/youcans/article/details/124281390)
Copyright 2022 youcans, XUPT Crated2022-4-18 欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列持续更新中 【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法 【youcans 的 OpenCV 例程200篇】159. 图像分割之全局阈值处理 【youcans 的 OpenCV 例程200篇】160. 图像处理之OTSU 方法 【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现 【youcans 的 OpenCV 例程200篇】162. 全局阈值处理改进方法 【youcans 的 OpenCV 例程200篇】163. 基于边缘信息改进全局阈值处理 【youcans 的 OpenCV 例程200篇】164.使用 Laplace 边缘信息改进全局阈值处理 【youcans 的 OpenCV 例程200篇】165.多阈值 OTSU 处理方法 【youcans 的 OpenCV 例程200篇】166.自适应阈值处理 【youcans 的 OpenCV 例程200篇】167.基于移动平均的可变阈值处理 更多内容请见 【OpenCV 例程200篇 总目录-202206更新】