首页 > 其他分享 >cv2.threshold利用OSTU方法分割图像的前景和背景

cv2.threshold利用OSTU方法分割图像的前景和背景

时间:2024-11-06 13:19:33浏览次数:3  
标签:分割 阈值 方差 类间 cv2 图像 threshold OSTU

OSTU方法,又称大津法或最大类间方差法,是一种在图像处理中广泛应用的自动阈值选择方法。该方法由日本学者大津(Nobuyuki Otsu)于1979年提出,旨在通过最大化前景与背景之间的类间方差来自动确定一个最佳阈值,从而将图像分割成前景和背景两部分。

OSTU方法的核心思想是寻找一个阈值T,使得图像的前景(高灰度值区域)和背景(低灰度值区域)之间具有最大的类间方差。类间方差越大,说明前景和背景的区分度越高,分割效果越好。

具体来说,OSTU方法的步骤如下:

  1. 计算图像的直方图:首先,计算图像的灰度直方图,即统计每个灰度级出现的频次。这有助于了解图像的整体灰度分布。
  2. 初始化变量:然后,初始化两个类(前景和背景),以及相关的变量,如权重(像素数量占总像素的比例)、均值和方差等。
  3. 迭代计算类间方差:接下来,通过迭代的方式,尝试不同的阈值T,并计算每个阈值下的类间方差。在每次迭代中,根据当前阈值T将像素分为前景和背景两类,并更新两类的权重、均值和方差。然后,计算当前阈值下的类间方差。
  4. 确定最佳阈值:最后,选择使类间方差最大的阈值T作为最佳阈值。这个阈值将用于将图像分割成前景和背景两部分。

OSTU方法具有自适应性强、分割效果好的优点,特别适用于目标单一的图像分割。然而,对于多目标图像或灰度分布不均匀的图像,OSTU方法可能无法获得理想的分割效果。在这种情况下,可以考虑使用其他更复杂的分割方法或结合其他预处理步骤来改善分割效果。

示例代码:

def ostu(img, save, name):

# 读入图像,转换为灰度
    image = cv2.imread(img, 0)

# 高斯滤波
    blurred = cv2.GaussianBlur(image, (5, 5), 0)

# 使用ostu自动计算阈值并分割
    _, binary = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 形态学后处理,可选,可以使用开,闭等操作连接区域和消除噪声
    # kernel = np.ones((5, 5), np.uint8)
    # closed = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)
    # opened = cv2.morphologyEx(closed, cv2.MORPH_OPEN, kernel)
    opened = binary

# 找到二值图的轮廓
    contours, _ = cv2.findContours(opened, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 在原图上画出轮廓
    out = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
    cv2.drawContours(out, contours, -1, (0, 0, 255), 1)

    cv2.imshow('binary', binary)
    cv2.imshow('out', out)
    cv2.waitKey()
    cv2.destroyAllWindows()

前景和背景的分割结果:

标签:分割,阈值,方差,类间,cv2,图像,threshold,OSTU
From: https://blog.csdn.net/qq_51570094/article/details/143558903

相关文章

  • (ICCV2023)多尺度空间特征提取模块,有效涨点,即插即用
    题目:SAFMN:Spatially-AdaptiveFeatureModulationforEfficientImageSuper-Resolution期刊:CVPR(ConferenceonComputerVisionandPatternRecognition)GitHub地址:https://github.com/sunny2109/SAFMN年份:2023作者单位:TheChineseUniversityofHongKong(CUHK)......
  • ProtoStuff用法
    packagecom.shuwei.dai;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;/***jdk序列化*/publicclassJdkSerializeUtil{/***序列化**......
  • Percolation threshold of a system
    Assignment3(Percolation)Goal:Writeprogramstoestimatethepercolationthresholdofasystem,whichisameasureofhowporousthesystemneedsbesothatitpercolates.PartI:WarmupProblemsTheproblemsinthispartoftheassignmentareintended......
  • 深度学习(np,tensor,pil,cv2互转)
    在做深度学习的时候经常会在这四种格式上互转。转换时有几个需要注意的点:1.np和cv2都能通过cv2.imshow显示出来。2.torchvision的transforms会把HWC转为CHW。3.from_numpy读取的HWC还是HWC,需要额外对tensor旋转。4.pil和cv2读取的都是HWC格式,不过C中的BGR和RGB顺序不同。......
  • ModuleNotFoundError: No module named 'cv2'
    前言运行 python3req.py 文件时遇到:ModuleNotFoundError:Nomodulenamed'cv2'原因是:环境中缺少 cv2 的包,所以会出现 Nomodulenamed'cv2’ 的问题。cv2 的包名并不叫 cv2 ,所以使用 pipinstallcv2 不能安装。cv2 的包名叫 opencv-python ,使用以下命令即......
  • 《大侠立志传》游戏闪退未响应提示“找不到cv210.dll”文件该怎么处理?大侠立志传游戏
    《大侠立志传》以其丰富的剧情和独特的玩法吸引着众多玩家。然而,启动游戏时若出现闪退未响应且提示“找不到cv210.dll”文件,着实令人苦恼。遇到这种情况该如何处理呢?下面为大家提供解决办法。cv210.dll的功能介绍cv210.dll是VisualC++RedistributablePackage的一部分,特别......
  • 2024年一款非常好用的视频剪辑软件会声会影Corel VideoStudio2024,非常适合新手
    随着数字媒体的飞速发展,视频剪辑已成为表达创意、传播信息的重要工具。2024年,视频剪辑软件市场迎来了新一轮的革新与竞争。今天,我们就来盘点一下这一年里备受瞩目的十大视频剪辑软件,无论你是初学者还是专业团队,都能在其中找到适合你的那一款。会声会影CorelVideoStudio2024一......
  • 解决 ModuleNotFoundError: No module named ‘cv2‘?
    前言解决ModuleNotFoundError:Nomodulenamed‘cv2’?ModuleNotFoundError:Nomodulenamed‘cv2’?1.安装opencv-python:pipinstallopencv-python-ihttps://pypi.tuna.tsinghua.edu.cn/simple/2.出现错误ERROR:Couldnotbuildwheelsforopencv-python......
  • py3.7+win10的cv2.xfeatures2d_SIFT.create()函数不存在问题
    python3.7环境window1064位cv2包问题。问题做图片处理用opencv-python做模板匹配的时候会用个sift模型,就会用到cv2.xfeatures2d_SIFT.create()这个函数,在我正要用它增加自己知识,巴拉巴啦....的时候,咦?!这是个什么鬼哦,没有这个函数呢。百度发现需要什么卸载原版本,换成opencv-......
  • 使用ClassificationThresholdTuner进行二元和多类分类问题阈值调整,提高模型性能增强结
    AUROC指标,顾名思义,是基于ROC的,ROC是一条显示真阳性率与假阳性率关系的曲线。ROC曲线本身并不假设使用任何特定的阈值。但是曲线上的每个点对应一个特定的阈值。在下面的图中,蓝色曲线是ROC。这条曲线下的面积(AUROC)衡量了模型的总体性能,是在所有潜在阈值上的平均值。......