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代码实现)
目录 前言 几个相关概念 噪声 滤波器 算法原理 算法思想 噪...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...

工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
Shell 解释器 bash 和 dash 区别
bash 和 dash 都是 Unix/Linux 系统中的 Shell 解释器,但它们在功能、语法和性能上有显著区别。以下是它们的详细对比: 1. 基本区别 特性bash (Bourne-Again SHell)dash (Debian Almquist SHell)来源G…...