实验5 图像分割

1. 实验目的

①掌握图像分割的含义与目的;
②掌握迭代法、最大类间方差法、直方图法等阈值分割方法;
③掌握霍夫变换、区域生长法、区域分裂与合并法的原理,并能编程实现。

2. 实验内容

①调用Matlab / Python+OpenCV中的相关函数,分别通过实验法、直方图法、大津算法确定阈值,实现图像的全局阈值分割。
②调用Matlab / Python+OpenCV中的霍夫变换函数,检测图像中的直线和圆。
③自行编写代码,实现区域生长法及区域分裂与合并算法。

3. 实验过程

3.1 全局阈值分割
3.1.1迭代法

初始化一个阈值,通过迭代法求出最佳阈值,使用最佳阈值对图像进行分割,并显示原图和分割结果(参考图1)。
(1) 主要调用的函数、功能及参数说明

函数名函数功能参数说明
imread(A)读取图片A:图片在文件夹的位置
rgb2gray(A)灰度转化A:图片
mean(A)求列或行的平均数A:矩阵
mean2(image)对整一个矩阵求像素平均值image:图片
find(A)查找非零元素的索引和值A:查找条件
abs(A)返回数组A中每个元素的绝对值和复数的模A:矩阵
(2) 源代码及实验结果(添加必要注释)
A= imread('lena.png');
image=rgb2gray(A);%灰度转化
T=mean2(image);%取均值作为初始阈值
done=false;%定义跳出循环的量i=0;
%while循环进行迭代
while ~doner1=find(image<=T);%小于阈值的部分r2=find(image>T);%大于阈值的部分Tnew=(mean(image(r1))+mean(image(r2)))/2;%计算分割后两部分的阈值均值的均值done=abs(Tnew-T)<1;%判断迭代是否收敛T=Tnew;%如不收敛,则将分割后的均值的均值作为新的阈值进行循环计算i=i+1;
end
%这两步是将图像转换成二值图像
image(r1)=0;%将小于阈值的部分赋值为0
image(r2)=1;%将大于阈值的部分赋值为1   subplot(121);imshow(A);title('原图')
subplot(122);imshow(image,[]);title('迭代处理后')

在这里插入图片描述
(3) 总结(总结实验法步骤,对实验结果进行分析)
当目标与背景的面积相差较大时,更好地选择是将初始阈值T设置为最大灰度值和最小灰度值的中间值。

3.1.2最大类间方差法

使用最大类间方差法求出最佳阈值后,使用最佳阈值对图像进行分割,并显示原图和分割结果(参考图2)
(1) 主要调用的函数、功能及参数说明

函数名函数功能参数说明
graythresh采用OTSU算法来获取全局阈值,自动选取阈...

(2) 源代码及实验结果(添加必要注释)

I = imread('lena.png');
T = graythresh(I); %采用OTSU算法来获取全局阈值,自动选取阈值
K = im2bw(I, T);%二值化
figure;
subplot(121), imshow(I);title('原图')
subplot(122), imshow(K);title('最大类间方差法')

在这里插入图片描述
(3) 总结(总结最大类间差分算法步骤,对实验结果进行分析)
最大类间差分算法是根据图像的灰度特性,将图像分为前景和背景两个部分。当取最佳阈值时,两部分之间的差别应该是最大的,前景和背景之间的类间方差如果越大,就说明构成图像的两个部分之间的差别越大。

3.1.3直方图法

首先得到图像的直方图,选出最佳阈值后,使用最佳阈值对图像进行分割,并显示原图和分割结果(参考下图)。

在这里插入图片描述
(1) 主要调用的函数、功能及参数说明

函数名函数功能参数说明
imread(A)读取图片A:图片在文件夹的位置
rgb2gray(A)灰度转化A:图片

(2) 源代码及实验结果(添加必要注释)

A = imread('lena.png');
image=rgb2gray(A);%灰度转化[m,n]=size(image);%测量图像尺寸参数
GK=zeros(1,256); %预创建存放灰度出现概率的向量
for k=0:255GK(k+1)=length(find(image==k))/(m*n);%计算每级灰度出现的概率,将其存入GK中相应位置
endsubplot(2,2,1);imshow(image);title('灰度图像')
grid on;%显示网格线
axis on;%显示坐标系subplot(2,2,2),bar(0:255,GK,'g')%绘制直方图
title('灰度直方图')
xlabel('灰度值')
ylabel(' 出现概率')image2=im2bw(A,150/255);
subplot(2,2,3),imshow(image2);title('阈值150的分割图像')
grid on;
axis on;image3=im2bw(A,200/255);
subplot(2,2,4),imshow(image3);title('阈值200的分割图像')
grid on;
axis on;

在这里插入图片描述
(3) 总结(总结直方图法步骤,对实验结果进行分析)
图像分割是图像识别的基础,对图像进行图像分割,将目标从背景区域中分离出,可以避免图像识别时在图像上进行盲目的搜索,大大提高图像识别的效率以及识别准确率。基于灰度直方图的阈值分割计算简单,适用于目标与背景分布于不同灰度范围的灰度图像,特别是遥感图像。

3.2 霍夫变换
3.2.1 调用霍夫变换函数检测直线和圆

如下图所示,调用 Matlab/Python+OpenCV中的霍夫变换函数,检测图像中的直线和圆。

在这里插入图片描述
(1) 主要调用的函数、功能及参数说明

函数名函数功能参数说明
imread(A)读取图片A:图片在文件夹的位置

(2) 源代码及实验结果(添加必要注释)

①直线检测代码及实验结果:

A= imread('lena.png');I=rgb2gray(A);%灰度转化BW = edge(I,'canny');%Canny方法提取图像边界,返回二值图像(边界1,否则0)
[H,T,R] = hough(BW);%计算二值图像的标准霍夫变换,H为霍夫变换矩阵,I,R为计算霍夫变换的角度和半径值
P = houghpeaks(H,3);%提取3个极值点
x = T(P(:,2)); 
y = R(P(:,1));
lines=houghlines(BW,T,R,P);%提取线段subplot(1,2,1);imshow(A);title('原图')
subplot(1,2,2);imshow(I);title('直线检测')
hold on;for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');%画出线段
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');%起点
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');%终点
end

在这里插入图片描述
②圆形检测代码及实验结果:

rgb= imread('lena.png');
image = rgb2gray(rgb);
imshow(image)d = imdistline(gca);
delete(d)
[centersBright,radiiBright,metricBright] = imfindcircles(rgb,[55 90],'ObjectPolarity','dark','Method','TwoStage','Sensitivity',0.94,'EdgeThreshold',0.1);
hBright = viscircles(centersBright, radiiBright,'Color','b');
b=length(radiiBright);
total_number=b;

在这里插入图片描述
③总结(总结霍夫变换检测步骤,并对实验结果进行分析)
霍夫变换的过程是在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果,该方法可以进行圆,直线,椭圆等形状的检测。

3.2.2 实现极坐标系下的霍夫变换(参考图5,6)

在这里插入图片描述
⑴ 源代码及实验结果(添加必要注释)

A= imread('lena.png');
I=rgb2gray(A);%灰度转化BW = edge(I,'canny');%Canny方法提取图像边界,返回二值图像(边界1,否则0)
[H,T,R] = hough(BW);%计算二值图像的标准霍夫变换,H为霍夫变换矩阵,I,R为计算霍夫变换的角度和半径值subplot(1,2,1);imshow(A);title('原图')
subplot(1,2,2);imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');%hough变换的图像
title('霍夫变换结果')
xlabel('\theta'), ylabel('\rho');
axis on,axis square,hold on;

在这里插入图片描述
⑵ 总结(总结极坐标下霍夫变换步骤,对实验结果进行分析)
图像x−yx−y坐标空间中,经过点(xi,yi)(xi,yi)的直线表示为:yi=axi+b(1),yi=axi+b(1)。其中,参数a为斜率,b为截矩。其中,参数a为斜率,b为截矩。通过点(xi,yi)点(xi,yi)的直线有无数条。变换到了参数平面a−ba−b。这个变换就是直角坐标中对于(xi,yi)(xi,yi)点的Hough变换。

3.3 区域生长法

分别使用不同生长准则实现区域生长算法(参考图7)
在这里插入图片描述
⑴ 源代码及实验结果(添加必要注释及结果图)

I=imread('lena.png');if isinteger(I)I=im2double(I);
end
I = rgb2gray(I);figure 
imshow(I)
[M,N]=size(I);
[y,x]=getpts; %单击取点后,按enter结束
x1=round(x);
y1=round(y);
seed=I(x1,y1); %获取中心像素灰度值J=zeros(M,N);
J(x1,y1)=1;count=1; %待处理点个数
threshold=0.15;
while count>0count=0;for i=1:M %遍历整幅图像for j=1:Nif J(i,j)==1 %点在“栈”内if (i-1)>1&(i+1)<M&(j-1)>1&(j+1)<N %3*3邻域在图像范围内for u=-1:1 %8-邻域生长for v=-1:1if J(i+u,j+v)==0&abs(I(i+u,j+v)-seed)<=thresholdJ(i+u,j+v)=1;count=count+1;  %记录此次新生长的点个数endendendendendendend
endsubplot(1,2,1),imshow(I);title('原图')
subplot(1,2,2),imshow(J);title('区域生长实现')

在这里插入图片描述

4. 实验小结

①分析和总结全局阈值分割的几种实验结果,能够得到哪些启发或结论?
答:在上面的图像分割中,通过不同的阈值处理方法,得到良好的图像分割结果。不难发现, 对于不同的噪声环境和光照影响等等,一种单一的阈值分割方法往往无法出色的完成任务。
在今后的实验中,要合理的根据自己的图像样本来选择合理的算法。例如是否需要对图像进行平滑去噪,是否需要图像分区来使光照近似均匀。不仅要掌握上面的处理方法,也明白了为什么对上面的图像进行这样的处理和分析。
②当图片过曝或者过暗造成霍夫变换检测效果不理想时,可以采用哪些图像处理方法提升效果?
答:依赖直方图来调整图像强度值
③查阅相关资料,了解更多的图像分割方法,并从原理和结果等方面对比它们之间的异同。
答:
(1)基于阚值的分割方法是按照原图像的灰度特征划分出一个或者几个灰度阈值将原图像的每个像素的灰度值与灰度阈值进行比较,继而确定每个像素应该位于哪个区域。
(2)基于边缘的图像分割
边缘是指一个区域的结束与另一个区域的开始,也就是说图像边缘代表的是两个不同的区域边界线上的一些像素的集合,它一般代表着图像的灰度、纹路、颜色发生了一些突变,是图像局部特征不连续的体现。基于边缘的图像分割方法一般是基于图像灰度值检测的分割方法,即图像边缘是图像灰度值发生突变的一个转折,图像边缘有两个要素:幅度与方向。沿着边缘的方向,灰度值的变化比较小,垂直于边缘的方向,灰度值的变化比较大。因此我们可以对像素的灰度值进行求导来判断图像的边缘。
(3)基于区域的分割方法
区域生长指的是根据同一区域内像素具有一些相似的性质(灰度值、纹路、颜色)来聚集像素点的一种方法。我们可以从一个像素或者是一块很小的区域开始,将周围具有相同性质的像素或者区域划入到目前的区域当中,直到没有其他的像素或者是区域能够划入到当前区域为止,以此来实现区域不断增长的过程。

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

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

相关文章

nginx优势以及应用场景,编译安装和nginx

一. Nginx是什么&#xff1f; 1. Nginx概述 高性能、轻量级Web服务软件系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30,000&#xff5e;50,000个并发请求Nginx&#xff08;发音同 “engine x”&#xff09;是一个高性能的反向代理和Web服务器软件&#xff0c…

OffscreenCanvas:Web Workers 中的画布操作

在 Web 开发中&#xff0c;我们经常需要处理复杂的图形和动画&#xff0c;这些操作可能会影响页面的性能和用户体验。为了解决这个问题&#xff0c;现代浏览器引入了 OffscreenCanvas 接口&#xff0c;它允许我们在后台线程&#xff08;Web Workers&#xff09;中进行画布操作&…

python教程---网络爬虫

7.1 urllib Urllib是Python内置的一个用于读取来自Web的数据的库。它是一个请求库&#xff0c;可以用来发送HTTP请求&#xff0c;获取网页内容&#xff0c;支持多种HTTP方法&#xff0c;如GET和POST等。 使用Urllib读取网页内容的步骤如下&#xff1a; 导入Urllib库中的reque…

Redis--18--Redis Desktop Manage下载与安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Redis Desktop Manage1.官网下载https://redis.io/insight/ 2.安装方法3.使用方法3.1.进入RedisDesktopManager的主界面3.2 新建连接3.3 支持操作 Redis Desktop Ma…

J021_QQ号格式校验

一、需求描述 校验QQ号码是否正确。要求全部是数字&#xff0c;数字长度&#xff08;6-20位之间&#xff09;&#xff0c;不能以0开头。 二、代码实现 package com.itheima.sort;public class Test {public static void main(String[] args) {System.out.println("----…

汽车尾灯(转向灯)电路设计

即当汽车进行转弯时,司机打开转向灯,尾灯会根据转向依次被点亮,经过一定的间隔后,再全部被消灭。不停地重复,直到司机关闭转向灯。 该效果可由以下电路实现: 完整电路图: 02—电路设计要点 延时电路的要点主要有两个: 一、当转向开关被按下时,LED需要逐个亮起; 二、LED被逐…

uniapp 使用cavans 生成海报

uniapp 使用cavans 生成海报 npm install qs-canvas1.创建 useCanvas.js /*** Shopro qs-canvas 绘制海报* version 1.0.0* author lidongtony* param {Object} options - 海报参数* param {Object} vm - 自定义组件实例*/ import QSCanvas from qs-canvas; import { getPos…

NVIDIA Visual Profiler启动失败报错

在银河麒麟V10安装完NVIDIA后&#xff0c;想着试着运行一下NVIDIA Visual Profiler&#xff0c;发现报错&#xff0c;如下图。 照着提示翻阅日志文件。看见其中写着 !ENTRY com.nvidia.viper.birt 2 0 2024-06-30 08:39:39.806 !MESSAGE Could not resolve module: com.nvidi…

ACE之Task框架

简介 其提供了并发处理事件的能力 结构 #mermaid-svg-8gxc0Agd7gZ9tHdf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-icon{fill:#552222;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-text{…

R学习资源及R包安装

转自生信师兄 生信必备技巧之R语言基础教程 1. 学习资源 推荐书籍&#xff1a;R语言实战&#xff0c;R数据科学等等&#xff1b; 这两本书在公众号【生信师兄】都有pdf版&#xff0c;有需要的可以关注公众号【生信师兄】并回复&#xff1a;“R语言”&#xff0c;即可获得免费…

【自然语言处理】预训练语言模型实现与应用

预训练语言模型实现与应用 1 任务目标 1.1 案例简介 ​ 2018年&#xff0c;Google提出了预训练语言模型BERT&#xff0c;该模型在各种NLP任务上都取得了很好的效果。与此同时&#xff0c;它的使用十分方便&#xff0c;可以快速地对于各种NLP任务进行适配。因此&#xff0c;B…

《每天5分钟用Flask搭建一个管理系统》第8章:权限管理

第8章&#xff1a;权限管理 8.1 权限管理的概念 权限管理是控制用户对应用内不同资源访问的机制。它确保用户只能访问他们被授权的资源。 8.2 Flask-Principal扩展的使用 Flask-Principal是一个提供权限管理功能的Flask扩展&#xff0c;它允许您定义角色和权限&#xff0c;…

基于HarmonyOS NEXT开发智能提醒助手

目录 目录 目录 前言 关于HarmonyOS NEXT 智能提醒助手需求分析 智能提醒助手设计 1、系统架构 2、功能模块 智能提醒助手的应用场景 智能提醒助手的竞争力 具体技术实现 未来展望 结束语 前言 随着智能设备的普及和物联网技术的飞速发展&#xff0c;人们对于智能…

基于大津阈值法和二值化与联通区域标记进行图像目标计数

1 建模 A.读取图像&#xff1a; 1.使用imread函数读取图像文件。 2.如果图像是彩色的&#xff0c;通常需要先转换为灰度图像&#xff0c;因为大津阈值法通常应用于灰度图像。 B.灰度化&#xff1a; 1&#xff0e;如果图像是彩色的&#xff0c;使用rgb2gray函数将其转换为灰度…

《昇思25天学习打卡营第16天 | 昇思MindSpore基于MobileNetv2的垃圾分类》

16天 本节学习了垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络&#xff0c;相比于传…

Excel显示/隐藏批注按钮为什么是灰色?

在excel中&#xff0c;经常使用批注来加强数据信息的提示&#xff0c;有时候会把很多的批注显示出来&#xff0c;但是再想将它们隐藏起来&#xff0c;全选工作表后&#xff0c;“显示/隐藏批注”按钮是灰色的&#xff0c;不可用。 二、可操作方法 批注在excel、WPS表格中都是按…

【考研408计算机组成原理】微程序设计重要考点指令流水线考研真题+考点分析

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 目录 微指令的形成方式 微指令的地址形成方式 对应考题 题目&#xff1a;微指令的地址形成方式 - 断定方式 解题思路&#xff1a; 答题&#xff1a; 分析考点&…

每日疑问,多线程场景,下面的代码是否可以保证只执行一次

看着这个代码的目的是只注册一次sighandler&#xff0c;但是这个判定是否可以保证一次&#xff1f;但是根据代码看&#xff0c;其实不会有关键区的读写&#xff0c;所以即使有同步问题&#xff0c;也不会产生什么特别的影响。所以代码没有问题&#xff0c;但是这是一个坑。 in…

Spring Boot中的分页与排序实现

Spring Boot中的分页与排序实现 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在开发Web应用时&#xff0c;分页和排序是常见的功能需求&#xff0c;特别是在处…

计算机体系结构和指令系统

1.计算机体系结构 - 五大部件 - 冯 诺依曼 计算机的特点 1.计算机有五大部件组成 2.指令和数据以同等地位存储于存储器&#xff0c;可按照地址访问 3.指令和数据用二进制表示 4.指令由操作码和地址码组成 5。存储程序 6.以计算器为中心&#xff08;输入、输出设备与存储器…