matlab图像处理常用功能以及函数
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、matlab灰度处理相关
- 二、形态学的一些函数
- 1.腐蚀
- 2.膨胀
- 3.开运算
- 4.闭运算
- 三、其他一些可能会用到的方法
- 1.使用hough进行直线检测
- 2.圆检测
- 3.闭合形状检测
- 4.寻找峰值
- 5.手动选择区域
前言
在工作学习中,常常会遇到图像处理相关的任务,这些任务可能包括灰度处理、形状识别等,MATLAB相比于OpenCV等图像处理库更容易操作,然而很多函数用的时候半天想不起来,此处是在忙完项目后偷闲对任务中用到的一些方法进行记录,方便以后查找使用。
一、matlab灰度处理相关
图像整体灰度对比度太小,可以采用灰度拉伸、均衡化的方法
% 将low_in high_in的灰度范围映射到ow_out high_out范围
J=imadjust( I,[low_in high_in],[low_out high_out])% 使用log曲线拉伸灰度
I = im2double(I);
J = c * log(1 + double(I)); %c为参数
图像二值化,将目标物有效提取
% matlab有一种自适应的寻找阈值分割的方法
I = imbinarize(I,'adaptive','Sensitivity',0.75);
二、形态学的一些函数
1.腐蚀
作用:将二值图目标形状周围减少一圈
se = offsetstrel('ball',5,5); %定义腐蚀的卷积核形状
erodedI = imerode(BW,se); %腐蚀操作
2.膨胀
作用:将二值图目标形状周围加粗一圈
se = strel('line',11,90); %定义膨胀的卷积核形状
BW2 = imdilate(BW,se); %膨胀
3.开运算
开运算效果等同于使用同一个卷积核,先腐蚀后膨胀
作用:使边界平滑,消除细小的尖刺,断开窄小的连接,保持面积大小不变。
se = strel('disk',5);
afterOpening = imopen(original,se);
4.闭运算
开运算效果等同于使用同一个卷积核,先膨胀后腐蚀
作用:可以融合窄的缺口和细长的弯口,合上小洞,填补轮廓上的缝隙
se = strel(‘disk’,10);
closeBW = imclose(originalBW,se);
三、其他一些可能会用到的方法
1.使用hough进行直线检测
大致原理:以直角坐标系为例说明,直线方程为y=kx+b
,对于检测点来说,如果构建一个参数空间,则每一个点都代表参数空间中的一条直线:b=-kx+y
。如果构建一个二维矩阵表,横坐标为k,纵坐标为b,如果有两个点在一条直线上,反映在参数坐标系中则为这两个点代表的直线相交于一点,则二维矩阵表中就在(ki,bi)(k_i,b_i)(ki,bi)的位置统计数+1。当某位置数量特别多时,则说明图像空间中一定有一条 y=kj∗x+bjy=k_j*x+b_jy=kj∗x+bj直线。由于直角坐标系中k可能为无限大——即k不存在的情况,这个二维矩阵表不容易设置范围,实际应用中更多的是使用极坐标表示,此时参数为ρ\rhoρ和θ\thetaθ
RGB = imread('gantrycrane.png');
I = rgb2gray(RGB);
BW = edge(I,'canny'); %边缘检测,二值图像
[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89);
%参数:
% BW:表示输入边缘检测的二值图像
% 'RhoResolution':设置rho间隔的范围
% 'Theta':设置'Theta'的范围及间隔
%输出:
% H:表示二维矩阵表
% T:'Theta'列表
% R:Rho列表P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
%参数:
% H:二维矩阵表
% 5:表示要找5条直线
% 'threshold':设置找直线的阈值(即二维矩阵表中数量较小的位置不认为其为直线)lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
%参数:
% BW:表示输入边缘检测的二值图像
% T:'Theta'列表
% R:Rho列表
% 'FillGap':两条直线如果间隔小于5则认为是一条直线
% ,'MinLength':如果直线距离小于7,过滤
figure, imshow(I), hold on
max_len = 0;
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
end
2.圆检测
使用imcirclefind函数检测圆形
%更详细的参数介绍,请help imfindcircles
[centersBright, radiiBright] = imfindcircles(A,[Rmin Rmax],'ObjectPolarity','bright');
3.闭合形状检测
stats = regionprops('table',BW,'Centroid','MajorAxisLength','MinorAxisLength');
centers = stats.Centroid;
figure,imshow(I);
hold on;
for k=1:length(centers)plot(centers(k,1),centers(k,2),'x','LineWidth',2,'Color','red'); % 画出图像中心
end
4.寻找峰值
[pks,locs,widths,proms] = findpeaks(y,x,'MinPeakProminence',0.1,'Annotate','extents');%参数:
% y:纵坐标值列表
% x:横坐标值列表(注意x对应y,且x需要从小到大排序)
%输出
% pks:峰值
% locs:峰值所在的位置
% widths:半高宽
5.手动选择区域
h1 = figure();imshow(BW);
[S,~,~]=roipoly;
S1 = S; %注意窗口的坐标系和图像坐标系原点位置不同,可能需要使用S1 = S'变换到同一坐标系
for i=1:size(BW,1)for j=1:size(BW,2)if S1(i,j)==falseBW(i,j)=0;endend
end
close(h1);
相关文章:
matlab图像处理常用功能以及函数
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、matlab灰度处理相关二、形态学的一些函数1.腐蚀2.膨胀3.开运算4.闭运算三、其他一些可能会用到的方法1.使用hough进行直线检测2.圆检测3.闭合形状检测4.寻找…...
eBPF 之 ProgramType、AttachType和InputContext
1. ProgramType 定义定义在 include/uapi/linux/bpf.h 文件中,不同 Linux 版本会有变化,以下是 Linux 5.19 版本定义:enum bpf_prog_type {BPF_PROG_TYPE_UNSPEC,BPF_PROG_TYPE_SOCKET_FILTER,BPF_PROG_TYPE_KPROBE,BPF_PROG_TYPE_SCHED_CLS,…...
C++运行时类型识别RTTI
C技能 runtime type identification(RTTI) 运行时类型识别在使用多态的时候经常用到。本文将会介绍RTTI的几个特征。1. 运行时类型转换下面的程序模仿了dynamic_cast<type_id>()类型转化符号,根据每个类的id来判断当前的类型,如果id不匹配…...
idea多时编辑多行-winmac都支持
1背景介绍 idea编辑器非常强大,其中一个功能非常优秀,很多程序员也非常喜欢用。这个功能能够大大大提高工作效率-------------多行代码同时编辑 2win 2.1方法1 按住alt鼠标左键上/下拖动即可 这样选中多行后,可以直接多行编辑。 优点&a…...
BI是报表?BI是可视化?BI到底是什么?
很多企业认为只要买一个前端商业智能BI分析工具就可以解决企业级的商业智能BI所有问题,这个看法实际上也不可行的。可能在最开始分析场景相对简单,对接数据的复杂度不是很高的情况下这类商业智能BI分析工具没有问题。但是在企业的商业智能BI项目建设有一…...
Python基础-数据类型之元组
一、元组的定义 nums (1, 2, 3, 4, 5) 元组是序列的其中一种,每个元素都以逗号分隔,用()包围。 当元组中只有一个元素时,需要在元素后面加逗号分隔,nums (1,),否则括号会被当成运算符 nums (1) print(type(nums…...
大数据面试小抄
项目地址:https://github.com/GTyingzi/BigDATA 该项目是自己在学习大数据过程中整理、总结下来的一份面试小抄。涵盖Hadoop、Spark、Flink、Hive、HBae、Kafka、ES、Zookeeper等。 开源给大家,若感觉不错欢迎star~ 摘取Flink部分如下文章目录FlinkFli…...
Vue:(三十一)Vue封装的过度与动画
上一篇订阅与发布不够过瘾,接着再来一篇,come on!!!作用:在插入、更新或移除DOM元素时,在合适的时候给元素添加样式类名写法:过度:元素进入的样式:v-enter&am…...
文本处理:字符串替换
方法1:str.replace str.replace(old, new[, count]) Return a copy of the string with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced. 该方法逻辑大致如下所示&am…...
python 调用 dll 出现精度问题
问题:python 在调用dll 的时候出现了精度问题 总结:使用decimal库进行转换就可以正常传递。 ‘ 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 ’ 遇到的问题具体情况 dll 生成函数…...
STL讲解——模拟实现string
STL讲解——模拟实现string 经典的string类问题 大厂在面试中,面试官总喜欢让学生自己来模拟实现string类,最主要是实现string类的增、删、查、改、构造、拷贝构造、赋值运算符重载以及析构函数。大家看下自己可不可以写一个string类? cla…...
CDH 6.3.2 升级Hive 2.3.9
升级背景 DolphinScheduler 3.1.1安装好后,其源码中集成的是Hive 2.1.1,版本太低,当在数据中心连接Hive数据源时报错,所以升级CDH自带的Hive为2.3.9版本。 一、准备工作 1、下载hive2.3.9并解压 下载地址:http://a…...
距离不是拦截我们前进的主因,与社科院杜兰金融硕士一起奔赴山海
最近有咨询社科院杜兰金融管理硕士项目的同学反馈他在西安,读研来北京上课太远了。一直在纠结要不要申请,其实距离不是问题,相向而行才是关键。在项目就读的同学好多也是来自外地,他们克服了种种困难来到项目学习,就是…...
【SpringBoot】MyBatis-plus 报错 sqlSessionFactory sqlSessionTemplate 最新解决办法
本文针对 MyBatis-plus,对于 MyBatis 报相同的错误,可以看这个大佬的文章:SpringBoot3整合MyBatis报错:Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required 针对报错如下: Property sqlSessionF…...
jsp诊疗预约系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 jsp诊疗预约系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用jav…...
详解 APISIX Lua 动态调试插件 inspect
作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者。 原文链接 为什么需要 Lua 动态调试插件? Apache APISIX 有很多 Lua 代码,如何在运行时不触碰源代码的…...
#科研筑基# python初学自用笔记 第五篇 函数
调用函数python有很多内置函数,我们可以直接调用,详见python官方文档:内置函数 — Python 3.11.2 文档,也可以在命令行中输入help(函数名)来查看该函数的使用法则。函数名的本质就是指向一个函数对象的引用,完全可以用…...
设计模式之策略模式
一.基本内容1 . 实例有各种鸭子(野鸭,北京鸭子,水鸭等,鸭子有各种行为,比如飞,叫等显示鸭子的信息传统方法解决:鸭子为抽象类,具体鸭子继承抽象类2.传统方法的不足:其他鸭…...
dbdeployer 使用札记
https://github.com/datacharmer/dbdeployer默认配置文件为当前用户的$HOME/.dbdeployer/config.json作为配置文件,可以通过dbdeplyoer defaults export导出并修改配置或者直接通过dbdeployer defaults update来更新默认文件,配置文件包含MySQL初始信息。…...
MATLAB算法实战应用案例精讲-【图像处理】数字图像模糊化(附Java、python和matlab代码实现)
目录 前言 几个相关概念 噪声 滤波器 算法原理 算法思想 噪...
搭建Hexo博客-第1章-Git和GitHub以及Coding的简单用法
搭建Hexo博客-第1章-Git和GitHub以及Coding的简单用法 搭建Hexo博客-第1章-Git和GitHub以及Coding的简单用法 Coding GitHub Hexo Markdown 搭建博客 大家好,这是我第一次写博客。使用 GitHub Hexo 创建最基本的博客很容易,网上有很多现成的教程。…...
【C++修行之路】C/C++内存管理
文章目录程序区域内存划分C语言动态内存分配:new和delete:new、delete和malloc、free的区别:程序区域内存划分 C/C程序内存区域划分非常相似。 C语言动态内存分配: malloc、calloc、realloc都是C语言动态开辟内存的常用函数 其中 malloc 开…...
spring cloud alibaba Sentinel(四)
服务雪崩 在分布式系统中,由于网络原因或自身的原因,服务一般无法保证 100% 可用。 如果一个服务出现了问题,调用这个服务就会出现线程阻塞的情况, 此时若有大量的请求涌入,就会出现多条 线程阻塞等待,进而导致服务瘫痪。 由于服…...
Redis第三讲
目录 三、Redis03 3.1 Redis持久化之RDB 3.1.1 什么是RDB 3.1.2 备份是如何执行的 3.1.3 Fork 3.1.4 RDB持久化流程 3.1.5 dump.rdb文件 3.1.6 配置rdb文件生成位置 3.1.7 如何触发RDB快照以及保持策略 3.2 Redis持久化之AOF 3.2.1 什么是AOF 3.2.2 AOF持久化流程 …...
JAVA线程池的使用
一、池化思想和JAVA线程池 池化是很重要的思想;池化的好处是提供缓冲和统一的管理。这个笔者在本人的数据库连接池的博客中已经提到过了(JAVA常用数据库连接池_王者之路001的博客-CSDN博客 )。 线程池是另一种池化思想的运用,把…...
力扣56.合并区间
文章目录力扣56.合并区间题目描述排序合并力扣56.合并区间 题目描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中…...
代码随想录二刷Day03链表: 24.两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表||
24.两两交换链表中的节点 文章链接:代码随想录 (programmercarl.com) 思路: (1)首先如果要处理相邻两个节点的话,一定需要操作两个节点的前一个节点才可以,因此,本题需要设定一个虚拟头节点 …...
我应该在我的博客上写什么? 介绍如何撰写初学者容易担心的文章
我想有很多人开了博客,但想不起来写作,无法取得进展。 博客的主题和文章的内容不会仅仅通过写你想做的事情来工作。 重要的是要了解用户想要阅读的内容以及人们可能收集的内容,并将其与您想要编写的内容很好地匹配。 这一次,我…...
嵌入式C语言设计模式 --- 外观模式
1 - 什么是外观模式? 外观模式(Facade Pattern),是一种比较简单的结构型模式,它存在的目的,也是为了简单。 外观模式隐藏了一系列接口的复杂性,旨在为外部客户端提供一个更高层次且统一简单的接口,简化了客户端调用某些模块的一系列操作。 外观模式应该是软件工程师…...
若依ruoyi——手把手教你制作自己的管理系统【三、代码生成】
昨天情人节一( ̄︶ ̄*)) 送给赛利亚一((* ̄3 ̄)╭ ********* 专栏略长 爆肝万字 细节狂魔 请准备好一键三连 ********* 修改后的页面: 干干净净贼舒服一Ψ( ̄∀ ̄)Ψ——Ψ( ̄∀&#x…...
o2o网站建设资讯/网络推广比较经典和常用的方法有
配置如下:cpu: 扣肉 E6300HDD:WD 250G(SATAII 16M)mother board: foxconn 946GZpower:长城350Wmemory:DDR2 667 1G*2测试一段时间稳定后会托管起来,至于做什么用途,我暂时还没有明确的方向。我想尝试的是提供asp服务。当然如果有客户需要&…...
天津平台网站建设公司/网店运营在哪里学比较好些
异常:就是程序在运行时出现不正常情况。 1、异常由来:问题也是现实生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象。 其实就是java对不正常情况进行描述后的对象体现。对于问题的划分:一种是严重的…...
海外vps/北京网站优化效果
本文转自:http://bldmickey.blog.sohu.com/55905939.html 原文作者:bldmickeygmail.com 2007-07-19 17:05 阅读(1274)评论(0)编辑删除 版权声明:转载时请务必以超链接形式标明文章原文出处和作者信息 个人声明:文章中的内容如果引…...
电商网站怎么做微信支付/湖北seo服务
操作系统要求:Win2k、WinXP IIS5.0中文版(必装) 系统自带,如果默认没有安装的话,请到控制面板>添加/删除程序>添加/删除windows组件中添加 .NET Framework简体中文正式版(必装) 下载地址:http://aspxcn.com/download/dotnet…...
wordpress手机网站模版/怎么做蛋糕
作为今年的参与者在电力电子题目中B题AC_DC和C题DC_DC中选择了B题。起初究其题目来说,DC_DC相较于AC_DC较容易实现,但究其最终想获得更好的成绩最终选择AC_DC这题,这也意味着面临着各种风险和未知。 目录 一、题目分析 1.1AC_DC变换电路原…...
2022年中国企业500强榜单/seo视频教程我要自学网
Java数组初始化有3种方式:动态初始化,静态初始化,默认初始化。 var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为:数组名…...