【Python】图像分割 传统方法

2024-09-05 01:38

本文主要是介绍【Python】图像分割 传统方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

临时学的,记录一下代码,基于python numpy 实现

  • 直方图双峰法:

Prewitt 等人于六十年代中期提出的直方图双峰法(也称 mode 法) 是典型的全局单阈值分割方法。该方法的基本思想是:假设图像中有明显的目标和背景,则其灰度直方图呈双峰分布,当灰度级直方图具有双峰特性时,选取两峰之间的谷对应的灰度级作为阈值。如果背景的灰度值在整个图像中可以合理地看作为恒定,而且所有物体与背景都具有几乎相同的对比度,那么,选择一个正确的、固定的全局阈值会有较好的效果.算法实现:找到第一个峰值和第二个峰值,再找到第一和第二个峰值之间的谷值,谷值就是那个阀值了。

import numpy as np# 用于平滑灰度直方图
def smooth1d(line, k_size=11, n=1):for i in range(n):line = np.convolve(line, np.ones((k_size,))/k_size, mode='same')return line# 寻找峰值,ignore用于忽略部分像素,多峰情况
def findPeak(line, ignore=100):peak = []trough = []for i in range(ignore, len(line) - 1):if line[i] == 0:continueif line[i] > 0 and line[i+1] < 0:peak.append(i)elif line[i] < 0 and line[i+1] > 0:trough.append(i)return np.array(peak), np.array(trough)def twoMode(img_gray):hist, bins = np.histogram(img_gray.ravel(), bins=256, range=(0, 256))hist = smooth1d(hist, n=3)s = np.sign(np.diff(np.insert(hist, 0, values=0)))peak, trough = findPeak(s)peak = peak[np.argsort(hist[peak])[-2:]]trough = np.clip(trough, a_min=np.min(peak), a_max=np.max(peak))trough = trough[np.argmin(hist[trough])]print('2-mode:', trough)return trough
  • 迭代阈值图像分割:

1.统计图像灰度直方图,求出图象的最大灰度值和最小灰度值,分别记为ZMAX和ZMIN,令初始阈值T0=(ZMAX+ZMIN)/2;
2. 根据阈值TK将图象分割为前景和背景,计算小于TO所有灰度的均值ZO,和大于TO的所有灰度的均值ZB。
3. 求出新阈值TK+1=(ZO+ZB)/2;
4. 若TK==TK+1,则所得即为阈值;否则转2,迭代计算。

import numpy as npdef iterThresh(img_gray):zmax = np.max(img_gray)zmin = np.min(img_gray)ith_old = 0ith_new = (zmax + zmin) / 2while ith_old != ith_new + 1:zo = np.mean(img_gray[np.where(img_gray > ith_new)])zb = np.mean(img_gray[np.where(img_gray < ith_new)])ith_old = ith_newith_new = (zo + zb) / 2print('iter th:', ith_new)return ith_new
Reference:

[1] 图像分割 传统方法 整理

这篇关于【Python】图像分割 传统方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137609

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as