数字图像处理 边缘特征提取 Image edge detection

2024-06-06 09:48

本文主要是介绍数字图像处理 边缘特征提取 Image edge detection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Image edge detection


                今天听到师姐做报告,接触到了“各种算子” 感觉很有意思~ 图像的线性处理以及边缘检测.


 

                 

                  下面是一个普通图片,我们可以观察到在图片中有飞机和汽车,在数字图像处理中,边缘特征的提取(说白了就是把图像中物体边缘的坐标点标记出来,没别的)

                     

肿么破捏?


这个时候我们学习的最最简单的数学知识——求导




wait wait... 这是连续领域的啊!数字图像信息以离散的数字储存,肿么办?差分!

想想,对于一个点point(x,y) 它周围的点如果都和它的像素值相近或相同,

point(x,y) - point(x+1,y+1) 这样做差分结果是不是接近于0 ? (废话,肯定嘛 \-0-/ )


如果位于物体的边缘情况就变得不同了,这里做差的结果将远离0.

什么,对边缘没概念?来个极端的例子


下面图像的像素值随着从左到右的过程在边界处急剧升高!


下面介绍算子 (operator)

operator = [z1 z2  z3;

                  z4  z5  z6; 

                  z7  z8  z9];

怎么用呢?

对于一副图片Img  = [ i1 i2 i3;

                                   i4 i5 i6;

                                   i7 i8 i9];


Filted_img  = [ f1 f2 f3;

                        f4 f5 f6;

                        f7 f8 f9];

此处省略Img的其他点,f5可以看作是处理之后的图像中的任意一点.

滤波运算操作:

f5 = z1*i1 + z2*i2 + z3*i3 + z4*i4 + z5*i5 + z6*i6 + z7*i7 + z8*i8 +z9*i9;


用最简单的算子做例子

0 0 0 

0 1 0

0 0 0

这个算子对图像做以上介绍的滤波

得到啥?原图!


0 0 0

0 1 0 

0 0 -1

这个算子呢?只要稍加阈值

便可检测出边缘部分!

取一定的阈值,大于阈值的赋值为255,小于阈值的赋值为0

这里阈值我尝试了不同的值



下图是阈值较小时(我取的 5 ),比较敏感,

各种公路上的线条都识别出来了,换个大点的阈值



这里换做25的阈值.                                                                  我把阈值调到18的时候,效果算比较好的

可以看出这里几乎仅保留了汽车和飞机的轮廓,

但是又丢失了点信息,继续调节阈值

      



0 0 0

0 1 0

0 0 -1

这个算子很简单,但是效果嘛,不能算很好


这个时候换个有名的算子——sobel 算子

-1  0 1 

-2  0 2

-1  0 1

以及

 1  2  1

 0  0  0 

-1 -2 -1

具体内容还是wiki吧 ,真爱都在wiki : )


注意这里是做卷积!不是做简单的矩阵乘法!别傻...





呵呵旁边是我的滑板,地板砖上的细小颗粒的边缘都能检测出来...酷帅




Octave (matlab )实现代码:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% code writer 	:	EOF
% code date	    :	2014.09.27
% code file	    :	img_filter_sobel.m
% e-mail	      :	jasonleaster@gmail.com
%
%	If there is something wrong with my code, please
% touch me by e-mail. Thank you :)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear all
clcOriginal_img = imread('/home/jasonleaster/Picture/building.png');float_Orignal_img = double(Original_img);F64_WHITE = 255.0;
F64_BLACK = 0.000;THRESHOLD = 40;sobel_operator_X = [-1, 0, 1;-2,0,2;-1, 0, 1];
sobel_operator_Y = [1 , 2, 1; 0,0,0;-1,-2,-1];Original_img_row 	= size(Original_img,1);
Original_img_col 	= size(Original_img,2);
Original_img_channel 	= size(Original_img,3);sobel_operator_X_row = size(sobel_operator_X,1);
sobel_operator_X_col = size(sobel_operator_X,2);sobel_operator_Y_row = size(sobel_operator_Y,1);
sobel_operator_Y_col = size(sobel_operator_Y,2);dark_channel = zeros(Original_img_row,Original_img_col);
Filted_img   = zeros(Original_img_row,Original_img_col);for row = 1:Original_img_rowfor col = 1:Original_img_colmin_piexl = F64_WHITE;for channel = 1: Original_img_channel if(min_piexl > Original_img(row,col,channel))min_piexl = Original_img(row,col,channel);endenddark_channel(row,col) = min_piexl;end
endfor row = 1:Original_img_rowfor col = 1:Original_img_colconv_sum_X = 0;for square_row = (row - floor(sobel_operator_X_row/2)) : (row + floor(sobel_operator_X_row/2))for square_col = (col - floor(sobel_operator_X_col/2)) : (col + floor(sobel_operator_X_col/2))if square_row <= Original_img_row && square_col <= Original_img_col && ...square_row > 0                 && square_col > 0 conv_sum_X = conv_sum_X + ...dark_channel(square_row,square_col)...*sobel_operator_X(square_row - (row - floor(sobel_operator_X_row/2)) + 1,square_col - (col - floor(sobel_operator_X_col/2)) + 1);endendendconv_sum_Y = 0;     for square_row = (row - floor(sobel_operator_Y_row/2)) : (row + floor(sobel_operator_Y_row/2))for square_col = (col - floor(sobel_operator_Y_col/2)) : (col + floor(sobel_operator_Y_col/2))if square_row <= Original_img_row && square_col <= Original_img_col && ...square_row > 0                 && square_col > 0     conv_sum_Y = conv_sum_Y + ...dark_channel(square_row,square_col)...*sobel_operator_Y(square_row - (row - floor(sobel_operator_X_row/2)) + 1,square_col - (col - floor(sobel_operator_X_col/2)) + 1);endendendFilted_img(row,col) = sqrt(conv_sum_X*conv_sum_X +conv_sum_Y*conv_sum_Y);end
endfigure(1);
subplot(1,2,1);
imshow(Original_img);
title('Original Image')
subplot(1,2,2);
imshow(uint8(Filted_img));
title('Filted Image');



scharr 算子

-3   0 3

-10 0 10

-3   0  3

上面是X方向上的scharr算子

下面是Y方向上的scharr算子

3 10 3

0  0  0

-3 -10 -3














黄金时代 本杰明 美国 布面油画 1776年 654x765cm 私人收藏 纳尔逊-阿特金斯艺术博物馆
    
这幅被誉为黄金时代(he Golden Age)的画,描绘了母子情深的动人情景。作者本杰明·威斯特(benjamin west 1738-1820年),美国画家,但其大多数作品在伦敦完成。他是第一位赢得国际声誉的美国本土艺术家






这篇关于数字图像处理 边缘特征提取 Image edge detection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1035767

相关文章

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P98

更改为 差分的数学表达式从泰勒级数展开式可得: 后悔没听廖老师的。 禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

时间序列|change point detection

change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

【LVI-SAM】激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节

激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节 1. 特征提取实现过程总结1.0 特征提取过程小结1.1 类 `FeatureExtraction` 的整体结构与作用1.2 详细特征提取的过程1. 平滑度计算(`calculateSmoothness()`)2. 标记遮挡点(`markOccludedPoints()`)3. 特征提取(`extractF

2024年AI芯片峰会——边缘端侧AI芯片专场

概述 正文 存算一体,解锁大模型的边端侧潜力——信晓旭 当下AI芯片的亟需解决的问题 解决内存墙问题的路径 产品 面向大模型的国产工艺边缘AI芯片创新与展望——李爱军 端侧AI应用“芯”机遇NPU加速终端算力升级——杨磊 边缘端的大模型参数量基本小于100B AI OS:AI接口直接调用AI模型完成任务 具身智能的大脑芯片 大模

外部中断的边缘触发和电平触发

MCS-51单片机中的边缘触发是指当输入引脚电平由高到低发生跳变时,才引起中断。而电平触发是指只要外部引脚为低电平就引起中断。         在电平触发方式下,当外部引脚的低电平在中断服务返回前没有被拉高时(即撤除中断请求状态),会引起反复的不需要的中断,造成程序执行的错误。这类中断方式下,需要在中断服务程序中设置指令,清除外部中断的低电平状态,使之变为高电平。

从零开始学cv-14:图像边缘检测

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、图像边缘是什么?二、Sobel 算子三、Scharr 算子四、Prewitt算子五、Canny算子 前言 边缘检测是OpenCV中的一个重要组成部分,它用于识别图像中亮度变化显著的点,即边缘。通过边缘检测,我们可以从图像中提取出重要的特征,为后续的图像分析、形状识别和物体跟踪等任务奠定

图特征工程实践指南:从节点中心性到全局拓扑的多尺度特征提取

图结构在多个领域中扮演着重要角色,它能有效地模拟实体间的连接关系,通过从图中提取有意义的特征,可以获得宝贵的信息提升机器学习算法的性能。 本文将介绍如何利用NetworkX在不同层面(节点、边和整体图)提取重要的图特征。 本文将以NetworkX库中提供的Zachary网络作为示例。这个广为人知的数据集代表了一个大学空手道俱乐部的社交网络,是理解图特征提取的理想起点。 我们先定义一些辅助函数

MACS bdgdiff: Differential peak detection based on paired four bedGraph files.

参考原文地址:[http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html](http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html) 文章目录 一、MACS bdgdiff 简介DESCRIPTION 二、用法