【CV作业04】图像分割+UI

目录

作业要求

segment.py

人工阈值法

聚类法,半自动阈值分割

OSTU,全自动阈值确定

yen分割

 ui_sys.py

start.py


作业要求

实现yen方法:50分 (直接调用库最多25分)
实现聚类法:10分
实现ostu:20分(直接调用库最多10分)
实现人工阈值:10分
结果展示:10分

segment.py

人工阈值法

def thresholding(src, T):"""人工阈值法:param src: 原始图像:param T: 阈值:return:分割好的图像"""h, w = src.shapedst = src.copy()for i in range(h):for j in range(w):if src[i, j] < T:dst[i, j] = 0else:dst[i, j] = 255return dst

聚类法,半自动阈值分割

def clustering(src, T0, T_delta):"""聚类法,半自动阈值分割:param src: 原始图像:param T0: 初始阈值:param T_delta: 退出迭代的条件,T_new - T:return: 分割好的图像 dst"""h, w = src.shapedst = src.copy()T_new = T0while 1:G1, G2 = 0, 0n1, n2 = 0, 0T = T_new# 分割图像,产生两组像素𝑮𝟏(所有像素值<𝑇)和𝑮𝟐(所有像素值>=𝑇)for i in range(h):for j in range(w):if src[i, j] < T:G1 += src[i, j]n1 += 1dst[i, j] = 0else:G2 += src[i, j]n2 += 1dst[i, j] = 255# 对 G1和 G2计算平均灰度值 m1和 m2m1 = G1/n1m2 = G2/n2# 计算新阈值T_new = 0.5 * (m1 + m2)if abs(T_new - T) < T_delta:# 退出迭代breakreturn dst

OSTU,全自动阈值确定

def ostu(src, L=256):"""OSTU全自动阈值确定:param src: 原始图像:return: 分割后图像"""h, w = src.shape# 计算直方图H = np.zeros(L)for i in range(h):for j in range(w):H[src[i][j]] += 1H /= h*w# 计算图像平均灰度avg = 0for i in range(255):avg += i*H[i]var = np.zeros(L)# 遍历计算每个 T的类间方差for T in range(L):# 阈值为𝑇时,G1发生的概率w1 = 0for i in range(T):w1 += H[i]# 阈值为𝑇时,G2发生的概率w2 = 1-w1# 阈值为𝑇时,G1的均值avg1 = 0for i in range(T):avg1 += i * H[i]# 阈值为𝑇时,G2的均值avg2 = avg - avg1# 计算阈值为 T时的方差var[T] = w1*(avg1-avg)**2 + w2*(avg2-avg)**2# 获得阈值最大时的 TT = np.argmax(var)return thresholding(src, T)

yen分割

chatgpt对《A new criterion for automatic multilevel thresholding》的大致讲解:

该论文由Yen JC于1995年发表在图像处理领域的期刊《IEEE Transactions on Image Processing》上,提出了一种基于最大类间方差的自适应多阈值分割方法,称之为Yen方法。

在这篇论文中,Yen提出了一种新的多阈值分割准则,该准则基于信息熵和累积概率密度函数。具体来说,假设有K个阈值t1, t2, ..., tK-1,将原始图像分割成K个区域。定义pi为第i个区域中像素的概率密度函数,即:

pi = H(ti) - H(ti-1)

其中H(ti)是t为ti时的信息熵,定义为:

H(ti) = -Σpilog(pi)

pi在本文中称为累积概率密度函数。然后,定义Rk为第k个区域的像素灰度值的范围:

Rk = [tk-1, tk), k = 1, 2, ..., K

然后,计算第k个区域的累积概率密度函数Pk(x):

Pk(x) = Σi=1到k(pi * I[x∈Ri])

其中I[x∈Ri]是指x是否在第i个区域中。累积概率密度函数Pk(x)表示x的像素灰度值在k个区域中的分布情况。

然后,定义Pk(x)的熵为:

Gk(x) = -Σi=1到k(pi * log(pi / Pk(x)))

其中pi和Pk(x)同上。Gk(x)可以看作是x的像素灰度值在第k个区域中的信息熵。

最终,多阈值分割的准则定义为:

σ^2 = Σk=1到K-1((Σi=1到k(pi))^2 / (Σi=1到k(pi))^2) * Gk(tK)

其中,σ^2表示多阈值分割的类间方差,Gk(tK)表示最后一个阈值tK的熵,K为总阈值数。

然后使用最大类间方差准则选择最优的阈值集合来分割原始图像,使得类间方差最大。

总的来说,Yen方法使用信息熵和累积概率密度函数来计算多阈值分割的准则,避免了使用传统的直方图方法中需要的对图像进行直方图均衡化或梯度运算的预处理,因此适用于处理低对比度和灰度分布不均匀的图像。

在Yen方法中,我们需要计算每个阈值分割出来的两个类别的类内方差和类间方差。在计算类内方差时,我们需要计算每个类别的像素值的平均值,并计算该类别中所有像素值与该平均值之差的平方和。类间方差是指两个类别之间的方差。我们可以通过计算总体均值与每个类别的均值之间的平方和来计算类间方差。在Yen方法中,我们将类间方差最大的阈值作为最终的分割阈值。

def yen(src):"""yen分割:param src:原始图像:return:分割好的图像"""h, w = src.shape# 计算直方图hist, bins = np.histogram(src.ravel(), 256, [0, 256])# 获取图像的总像素数total_pixels = h*w# 计算概率分布:将每个像素值出现的频率除以总像素数p = hist / total_pixels# 计算像素概率分布的累积分布函数w = np.cumsum(p)# 计算像素值的加权平均值,即每个像素值的期望值mu = np.cumsum(p * np.arange(0, 256))mu_t = mu[-1]  # 整幅图像的期望值# 计算每个阈值分割出来的两个类别的类内方差和类间方差# 计算类间方差sigma_b_squared = (mu_t * w - mu) ** 2 / (w * (1 - w))# 处理非有限值,将非有限值的类间方差设置为0sigma_b_squared[~np.isfinite(sigma_b_squared)] = 0# 获取最大的类间方差sigma_b_squared_max = sigma_b_squared.max()# 找到最大类间方差对应的阈值T = np.where(sigma_b_squared == sigma_b_squared_max)[0][0]return thresholding(src, T)

ui_sys.py

使用了PyQt6进行UI设计

使用了GTDesigner工具(可视化制作GUI)和pyUIC工具(将QTdesigner中生成的.ui文件转换为.py文件)

from PyQt6 import QtCore, QtWidgets
from PyQt6.QtGui import QPixmap
from PyQt6.QtWidgets import QFileDialog
import cv2 as cvfrom lab04.segment import *class Ui_Dialog(object):def __init__(self):self.org_img = None# 自动生成,省略def setupUi(self, Dialog):Dialog.setObjectName("Dialog")#。。。#。。。# 设定按钮的功能(自己加上)self.button_connect()# 自动生成,省略def retranslateUi(self, Dialog):#。。。#。。。# 给每个按钮加上点击功能def button_connect(self):self.pushButton_3.clicked.connect(self.open_img)self.pushButton.clicked.connect(lambda: self.show_dst_img(0))self.pushButton_2.clicked.connect(lambda: self.show_dst_img(1))self.pushButton_4.clicked.connect(lambda: self.show_dst_img(2))self.pushButton_5.clicked.connect(lambda: self.show_dst_img(3))# 打开图片def open_img(self):imgName, imgType = QFileDialog.getOpenFileName(None, "打开图片", "img/", "*.png;;*.jpg;;All Files(*)")org_img = cv.imread(imgName)self.org_img = cv.cvtColor(org_img, cv.COLOR_RGB2GRAY)# 显示图片pix = QPixmap(imgName).scaled(self.label.width(), self.label.height())self.label.setPixmap(pix)# 显示转换后的图片def show_dst_img(self, x):if x == 0:# 由于 ui 没有设计可以传递参数的入口,这里使用固定参数dst = thresholding(self.org_img, 150)elif x == 1:# 由于 ui 没有设计可以传递参数的入口,这里使用固定参数dst = clustering(self.org_img, 100, 15)elif x == 2:dst = ostu(self.org_img)elif x == 3:dst = yen(self.org_img)cv.imwrite('dst_img.png', dst)# 显示图片pix = QPixmap('dst_img.png').scaled(self.label_2.width(), self.label_2.height())self.label_2.setPixmap(pix)

start.py

启动程序

if __name__ == '__main__':# 创建ui,引用 Ui_MainWindow类app = QApplication(sys.argv)mainWindow = QMainWindow()ui = ui_sys.Ui_Dialog()# 调用 setupUi,创建初始组件ui.setupUi(mainWindow)# 创建窗口mainWindow.show()# 进入程序的主循环,并通过exit函数确保主循环安全结束(该释放资源的一定要释放)sys.exit(app.exec())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12307.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI理论学习】深入理解Prompt Learning和Prompt Tuning

深入理解Prompt Learning和Prompt Tuning 背景Prompt Learning简介1. Prompt是什么&#xff1f;2. 为什么要使用Prompt&#xff1f;3. Prompt Learning的形式&#xff08;举例&#xff09;4. 有哪些Pre-training language model&#xff1f;5. 常见的Prompt Learning的方法 Pro…

行业报告 | 2022文化科技十大前沿应用趋势(上)

文 | BFT机器人 前言 Introduction 文化科技是文化科技融合过程中诞生的系列新技术成果&#xff0c;是文化强国和科技强国两大战略的交又领域。2012 年 8月&#xff0c;科技部会同中宣部、财政部、文化部、广电总局、新闻出版总署发布《文化科技创新工程纲要》&#xff0c;开启…

灵活利用ChatAI,帮助你编写文章/故事,提高创作

前言 ChatAI 对于编写文章/故事提供了广泛且有益的帮助。它可以激发灵感、提供背景知识、检查错误并提供实时反馈等功能&#xff0c;在创作过程中起到了重要辅助作用。然而&#xff0c;在使用过程中需要保持适度&#xff0c;并将其视为一个有益工具而非完全取代人类创作的替代…

26岁财富自由,30岁已经历成功人士的一生,OpenAI掌门人的36条人生经验

Altman30岁就经历了成功人士的一生:程序员、创始人、投资人、CEO、慈善家。 编辑丨沃特敦 OpenAI掌门人Sam Altman是美国现在最炙手可热的企业家。上周,Altman刚刚度过38岁生日。今天分享的是他30岁时总结的人生经验。那时,Altman已经是硅谷最具人气的创投明星,年纪轻轻就能…

chatgpt赋能python:Python整人代码:开发有趣的恶作剧工具

Python整人代码&#xff1a;开发有趣的恶作剧工具 Python是一种高级编程语言&#xff0c;它有着众多功能库和API&#xff0c;能够用于各种不同的领域。但是&#xff0c;Python也可以用来编写有趣的恶作剧代码&#xff0c;搞乐一下&#xff01;在这篇文章中&#xff0c;我们将介…

ChatGPT成精了!

最近几天&#xff0c;朋友圈、公众号都被 ChatGPT 刷屏了。 更有不少标题党吹嘘 “谷歌要完&#xff0c;百度也危了”。 那么它到底有没有网上吹的这么神奇呢&#xff1f; 我亲测了一把&#xff0c;感觉确实非常惊艳&#xff01; 例如&#xff1a; 看着还不错&#xff0c;每…

学习笔记--肯德基餐厅信息查询

方法一&#xff1a;借助工具 import requests import json url"http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?opkeyword" wordinput(请输入查找的地区&#xff1a;) headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (K…

肯德基餐厅位置查询

肯德基餐厅查询&#xff1a; 肯德基餐厅查询&#xff1a; urlhttp://www.kfc.com.cn/kfccda/storelist/index.aspx 1.分析&#xff1a; -数据为动态加载数据&#xff08;输入城市关键字查询之后&#xff0c;url并没有改变&#xff0c;说明数据是动态加载出来的&#xff09; -通…

(产品分析)KFC肯德基APP分析报告

目录 一、市场分析 二、用户需求 三、产品概述 四、信息架构 五、交互流程 六、页面设计 总结 一、市场分析 2018沃指数 O2O的移动外卖已经成为大众点餐的主要方式之一&#xff0c;满足了用户足不出户就能享受美食的需求&#xff0c;作为传统快餐文化的领头羊&#xff0…

肯德基宅急送网上订餐系统(移动扫码点餐)的设计与实现(小程序+PHP+MySQL)

目 录 第1章 绪论 1 1.1研究背景及意义 1 1.2研究现状 1 1.3章节安排 2 第2章 关键性技术介绍 3 2.1 PHP 3 2.2 JSON 4 2.3 XML 5 2.4 HTML 5 2.5 Mysql介绍 6 第3章 需求分析 7 3.1系统业务流程分析 7 3.2 功能需求分析 8 3.3用例分析 10 3.3.1领域类图 10 3.3.2系统用例 14 3…

肯德基餐厅信息查询

肯德基餐厅信息查询网页 打开网页之后&#xff0c;在查询框中输入北京&#xff0c;然后点击查询&#xff0c;发现地址栏之中的url信息并没有发生变化&#xff0c;所以这里使用的是阿贾克斯查询动态渲染的方式。 这里面返回的内容为Content-Type:text/plain&#xff0c;也就是返…

自动化测试技术分享 | 敏捷开发、瀑布与迭代模型的项目应用分析

以下为作者观点&#xff1a; “敏捷”、“瀑布”、“迭代”是目前开发模式描述中应用比较多的词汇。那么&#xff0c;这些词汇有什么概念差异呢&#xff1f;别急&#xff0c;这就来为大家一一解惑。 首先瀑布模型、迭代模型都属于软件开发生命周期&#xff08;SDLC&#xff09…

第3章信息系统治理

信息系统治理(IT治理)是组织开展信息技术及其应用活动的重要管控手段&#xff0c;也是组织治理的重要组成部分&#xff0c;尤其在以数字化发展为重要关注点的新时代&#xff0c;组织的数字化转型和组织建设过程中&#xff0c;IT治理起到重要的统筹、评估、指导和监督作用。信息…

第4章信息系统管理

在信息技术和数据资源要素的推动下&#xff0c;社会各领域已经并正在加速进入数字化的全新发展时期&#xff0c;基于智能、网络和大数据的新经济业态正在形成&#xff0c;从"数字融合"向"数字原生"的发展是这个时期的主要特征&#xff0c;表现为信息技术和…

Meta版ChatGPT惨遭“开源”?最新大模型LLaMA被泄露,已在GitHub收获7k+星

1、Meta 全新大语言模型 LLaMA 正通过种子公开发放 2 月 24 日&#xff0c;Meta 公司发布了新的大模型系列 —— LLaMA&#xff08;Large Language Model Meta AI&#xff09;。Meta 宣称&#xff0c;LLaMA 规模仅为竞争对手 ChatGPT 的“十分之一”&#xff0c;但性能却优于…

GPT-4满分第一名通过大厂模拟面试!微软154页研究刷屏:与AGI的第一次接触

“GPT-4可被视作AGI &#xff08;通用人工智能&#xff09;的早期版本。” 若是一般人说这话&#xff0c;很可能会被嗤之以鼻—— 但微软雷蒙德研究院机器学习理论组负责人万引大神Sbastien Bubeck联手2023新视野数学奖得主Ronen Eldan、2023新晋斯隆研究奖得主李远志、2020斯…

致全体用户的一封信:关于Beezy,关于未来!

本篇面向大众&#xff0c;尽量将技术性事实通过简单语言输出&#xff0c;必然会出现不完全准确的地方&#xff0c;请AI从业人士谅解。 LLM&#xff08;语⾔⼤模型&#xff09;是Beezy诞⽣的基础&#xff0c; 在以ChatGPT为代表的现象级产品的催⽣中&#xff0c; 全世界都快速地…

LLM-20230225:LLaMA(大羊驼)【参数量: 70 亿、130 亿、330 亿、650 亿】【旨在推动 LLM 领域的小型化、平民化研究】【Meta】

Meta AI 同时在其官方发布了论文《LLaMA: Open and Efficient Foundation Language Models》 源码:https://github.com/facebookresearch/llama论文:https://research.facebook.com/file/1574548786327032/LLaMA--Open-and-Efficient-Foundation-Language-Models.pdf官方代码…

便捷记账: Siri +IOS ShortCut + ChatGPT + NotionAPI

使用 Notion API 新增 Notion 表格数据 获取 Notion API 访问令牌 登录 Notion 并创建一个 integrations&#xff08;Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.&#xff09; 点击 New Integration 点击Submit 获取访问令牌&…

如何拥抱ChatGPT,GPT-4,其实有捷径!

亲爱的朋友们&#xff0c;相信大家都已经知晓了ChatGPT的伟大之处了吧&#xff01;但是您们可能又苦于没有方便的获取之法&#xff0c;不过不用急&#xff0c;因为我今天就要介绍一个好东西给大家&#xff01; 如下图所示&#xff0c;这是一个谷歌插件&#xff0c;非常实用的C…