数字图像处理 边缘特征提取 Image edge detection
来源:互联网 发布:linux 不支持ext4 编辑:程序博客网 时间:2024/04/30 08:39
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 allclcOriginal_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;endendfor row = 1:Original_img_rowfor col = 1:Original_img_col conv_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); end end end conv_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); end end end Filted_img(row,col) = sqrt(conv_sum_X*conv_sum_X +conv_sum_Y*conv_sum_Y); endendfigure(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
- 数字图像处理7--特征提取
- PKU ACM 1009 Edge Detection 边缘提取算法
- 玩玩数字图像处理之边缘提取
- Edge Extraction -- 边缘提取
- 深度学习边缘提取HED(Holistically-Nested Edge Detection) c++接口实现
- 数字图像处理实验三 图像轮廓提取与边缘检测
- 边缘特征提取方法
- 边缘特征提取方法
- 边缘特征提取方法
- Edge Detection Tutorial(边缘检测教程)
- 数字图像处理 边缘检测
- 数字图像处理之特征提取及常用方法
- 数字图像处理---有关特征提取的相关概念
- 数字图像处理---有关特征提取的相关概念
- 数字图像处理10--基于特征提取的拼接方法
- 【图像处理专题(一)】图像边缘特征提取
- Edge Detection and Image SegmentatiON (EDISON) System
- C++类的存储空间学习总结
- 在win7下制作MAC启动u盘
- 利用栈的操作实现二进制转十进制
- log4c-在程序中设定日志文件名
- ListView Item点击事件失效
- 数字图像处理 边缘特征提取 Image edge detection
- 汇编语言----实验16--编写包含多个功能子程序的中断例程
- 把二元查找树转变成排序的双向链表
- iOS 开发库(iOS Developer Library)
- 【微软100题】输入一颗二元查找树,将该树转换为它的镜像
- C++ Primer读书笔记1--基本语言
- 用STL设计消息队列、优先级消息队列、资源分配管理器
- js文件包含方法
- Java List、Array中文,英文排序