数字图像边缘曲率计算及特殊点检测

news2025/1/15 22:40:23

一、曲率和数字图像边缘曲率检测常用方法简介

    边缘曲率作为图像边缘特征的重要参数,不仅反映了边缘的几何形状信息,还对于图像识别、图像分割、目标跟踪等任务具有显著影响。

      曲线的曲率(curvature)就是针对曲线上某个点的切线方向角对弧长的转动率,通过微分来定义,表明曲线偏离直线的程度。数学上表明曲线在某一点的弯曲程度的数值。曲率越大,曲线的弯曲程度越大。曲率的倒数就是曲率半径。

      曲率K的计算公式如下:

        在二维情况下,其标量形式为:

        在数字图像处理中,由于图像数据本质上是离散的(即像素值是在二维网格上的离散点),我们不能直接应用连续域中的微积分理论。因此,为了分析图像的局部变化(如边缘检测、纹理分析等),我们通常采用差分来近似连续域中的微分操作。

      目前,数字图像边缘曲率检测的常用方法主要有基于微分几何的方法、基于图像处理的方法以及基于机器学习的方法等。这些方法各有优缺点,如基于微分几何的方法计算精度高但计算复杂度高,基于图像处理的方法实现简单但易受噪声干扰,基于机器学习的方法则依赖于大量训练数据且模型泛化能力有限。

  • 二、数字图像曲率计算和特殊点检测思路

     主要算法思路:1.读入彩色图像  2.彩色图像转灰度图像  3.获取边界点4.通过简化计算曲率(如差分代替微分)5.对特殊点(曲率突变点)进行标记。

  • 三、程序代码

    %曲率计算和曲率突变点检测

    clear all;  

    close all;  

    clc;  

    % 读取图像  

    I = imread('FC0.png');  

    [m n d]=size(I);

    % 显示原始图像  

    imshow(I);  

    title('原始图像');  

    % 转换为灰度图像  

    Igray = rgb2gray(I);  

    BW=imbinarize(Igray);%图像二值化

    BW=~BW;

      figure,imshow(BW);

    [B, L] = bwboundaries(BW, 'noholes');    % 轮廓提取  

    boundary = B{1};  % 假设我们只处理最大的轮廓(或根据需要选择其他轮廓)

    size(B{1})  %1079行2列

    % 轮廓点坐标  

    x = boundary(:, 2);  %对应boundary矩阵的列

    y = boundary(:, 1);  %对应boundary矩阵的行

    plot(x,y),title('轮廓点边界曲线');

    % 计算轮廓点的差分(用于近似导数)  

    dx = diff(x);  

    dy = diff(y);  

    % 计算曲率(使用简单的差分近似)  

    % 注意:这里的R和k计算都是近似的  

    R = sqrt(dx.^2 + dy.^2); % 近似“半径”(实际上是轮廓点之间的局部距离)  

    % 由于dx和dy已经是差分,所以这里不再对dy和dx使用diff  

    k = abs(dx(1:end-1) .* dy(2:end) - dy(1:end-1) .* dx(2:end)) ./ (R(1:end-1).^3);  %计算曲率

    % 在k向量首尾添加NaN(或选择其他方式处理边界),因为首尾没有有效的曲率值k

    size(k);

    k = [NaN; k; NaN];  

    max(k);    %找到曲率最大值

    % 通过设置曲率阈值以识别特殊点  

    threshold = 0.05; % 这个值需要根据实际情况调整  

    special_points = find(k > threshold & ~isnan(k)); % 排除NaN值并找到曲率突变点  

    % 显示结果  

    figure;  

    imshow(I);  

    hold on;  %保持当前图形

    plot(x(special_points), y(special_points), 'go', 'MarkerSize', 8, 'LineWidth', 1); % 绘制曲率突变点

    title('曲率突变点检测');  

    hold off;  

    % 注意:此代码中的曲率计算进行了简化,在实际应用中,可能需要使用更精确的数值方法%%或基于几何的曲率估计

  • 四、测试图像

  • 五、部分运行结果

  •    如果大家觉得本文对大家有帮助,请关注、收藏和点赞,谢谢大家支持!

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

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

相关文章

只有4%知道的Linux,看了你也能上手Ubuntu桌面系统,Ubuntu简易设置,源更新,root密码,远程服务...

创作不易 只因热爱!! 热衷分享,一起成长! “你的鼓励就是我努力付出的动力” 最近常提的一句话,那就是“但行好事,莫问前程"! 与辉同行的董工说​:​守正出奇。坚持分享,坚持付出,坚持奉献&#xff0c…

患者特征对AI算法在解释阴性筛查数字乳腺断层摄影研究中的表现的影响| 文献速递-AI辅助的放射影像疾病诊断

Title 题目 Patient Characteristics Impact Performance of AI Algorithm in Interpreting Negative Screening Digital Breast Tomosynthesis Studies 患者特征对AI算法在解释阴性筛查数字乳腺断层摄影研究中的表现的影响 Background 背景 Artificial intelligence (AI)…

什么是云边协同?

当今信息技术高速发展的时代,"云边协同"(Edge Cloud Collaboration)已经成为一个备受关注的话题。它涉及到云计算和边缘计算的结合,为数据处理、存储和应用提供了全新的可能性。本文将介绍云边协同的概念、优势以及在不…

Learning vtkjs之LookUpTable

颜色映射表 LookUpTable 介绍 先看官方的介绍: vtkLookupTable is a 2D widget for manipulating a marker prop vtkLookupTable 是一个用于操纵标记属性的2维的小部件。 一般可以用来进行颜色刻度的显示。它会帮我们进行颜色线性插值计算 代码效果 其实设置一个…

C++必修:STL之vector的了解与使用

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. C/C中的数组 1.1. C语言中的数组 在 C 语言中,数组是一组相同类型…

顺序消费rocketMQ(FIFO先进先出)和小技巧 取模运算的周期性特征来将数据分组。

20240801 一、顺序消费MQ(FIFO先进先出)介绍 二、一个小技巧,对于取模运算,用来在几以前进行随机选取,取模运算的周期性特征来将数据分组,使用场景对于取模会重复问题 一、顺序消费MQ(FIFO先进先…

openeuler下载docker

https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/9/x86_64/stable/ #清华的网址 https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/ #阿里云的网址 开始配置 vim /etc/yum.repos.d/docker-ce.repo #写仓库,我这里…

【初阶数据结构篇】归并排序和计数排序(总结篇)

文章目录 归并排序和计数排序前言代码位置归并排序计数排序排序性能比较排序算法复杂度及稳定性分析 归并排序和计数排序 前言 本篇以排升序为例 代码位置 gitee 前篇:【初阶数据结构篇】冒泡排序和快速排序 中篇:【初阶数据结构篇】插入、希尔、选择…

【Qt】QDateTimeEdit

在Qt中,QDateEdit是用于选择日期的微调框,QTimeEdit是用于选择小时和分钟的微调框 QDateTimeEdit则是基于QDateEdit和QTimeEdit的组合控件,能够同时显示日期和时间,并允许用户以交互方式编辑日期 常用属性 属性说明dateTime时间…

electron-updater实现electron全量更新和增量更新——渲染进程UI部分

同学们可以私信我加入学习群! 正文开始 前言更新功能所有文章汇总一、两个同心球效果实现二、球内进度条、logo、粒子元素实现2.1 球内包含几个元素:2.2 随机粒子生成方法generateRandomPoint2.3 创建多个粒子的方法createParticle 三、gsap创建路径动画…

基于python的百度迁徙迁入、迁出数据分析(六)

书接上回,苏州市我选取了2024年5月1日——5月5日迁入、迁出城市前20名并求了均值,从数据中可以看出苏州市与上海市的关系还是很铁的,都互为对方的迁入、迁出的首选且迁徙比例也接近4分之一,名副其实的老铁了; 迁出城市…

Seurat-SCTransform与harmony整合学习续(亚群分析)

目录 提取细胞亚群 SCTransform-harmony技术路线 ①亚群SCTransform标准化 ②harmony去批次 这里对上一章的内容进行补充: Seurat-SCTransform与harmony整合学习-CSDN博客 提取细胞亚群 rm(list ls()) library(Seurat)#好像先后需要先后加载 library(patchw…

【Jenkins】在linux上通过Jenkins编译gitee项目

因项目需求近期在linux服务器上部署了Jenkins来自动编译gitee上的项目源码,期间踩到了一些坑,花费了不少时间来处理,特此记录。 所需资源下载列表: Jenkins :https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.46…

文件系统 --- 重定向,缓冲区

序言 本篇文章的内容和上一篇文章 👉点击查看 紧密相连,所以为了更好的理解本篇文章,需要大家将前置知识准备好哦😇。  本文主要向大家介绍文件的重定向,以及基于用户级别的缓冲区和基于操作系统级别的缓冲区。原来看…

AI技术和大模型对人才市场的影响

012024 AI技术和大模型 2024年AI技术和大模型呈现出多元化和深入融合的趋势,以下是一些关键的技术方向和特点: 1. 生成式AI 生成式AI(Generative AI)在2024年继续快速发展,它能够创造全新的内容,而不仅仅…

Redis——有序集合

目录 1. 添加元素 ZADD 2. 查看全部元素 ZRANGE 3. 查看某个元素的分数 ZSCORE 4. 查看元素的排名 ZRANK SortedSet 也叫 ZSet ,即有序集合, 有序集合与集合的区别: 有序集合的每个元素都会关联一个浮点类型的分数,依赖该分数的的大小对…

《Milvus Cloud向量数据库指南》——多模态融合新纪元:音频、视频与文本的无缝转换

在探讨多模态数据处理与应用的广阔领域中,多模态文本、音频、视频数据的融合与交互成为了近年来人工智能研究的热点之一。这一趋势不仅推动了技术的深度发展,也为众多行业带来了前所未有的创新机遇。本文将深入剖析多模态文本-音频与多模态文本-视频RAG(Retrieval-Augmented…

书生大模型基础岛-第三关:LangGPT结构化提示词编写实践

1.来源和任务 来源: https://github.com/InternLM/Tutorial/blob/camp3/docs/L1/Prompt/task.md 任务: 背景问题:近期相关研究发现,LLM在对比浮点数字时表现不佳,经验证,internlm2-chat-1.8b (internlm2-…

C++——list容器以及手动实现

LIST容器 list概述列表容器属性例子 list函数构造函数默认构造函数:带有元素个数和元素初值的构造函数:范围构造函数:拷贝构造函数:移动构造函数:示例 赋值运算符重载拷贝赋值操作符 (1):移动赋值操作符 (2…