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代码实现)
目录 前言 几个相关概念 噪声 滤波器 算法原理 算法思想 噪...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
