Hello Mat

 找回密码
 立即注册
查看: 4364|回复: 0

改进的多算子边缘检测算法

[复制链接]

1295

主题

1521

帖子

112

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22639
发表于 2017-2-5 12:07:42 | 显示全部楼层 |阅读模式
1Sobel算子对于图像边缘检测,Sobel算子对噪声具有平滑抑制作用,但是得到的边缘较粗,且可能出现伪边缘,Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
2Prewitt算子对于图像边缘检测,Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用,然而Prewitt算子图像边缘检测的判定是欠合理的,会造成边缘点的误判。
3Canny算子对于图像边缘检测,Canny边缘检测算法是高斯函数的一阶导数,Canny边缘检测弱化了噪音的影响,然而Canny算子对图像边缘检测,边缘检测过于细化,同样不利于图像纹理特征的提取。
4Roberts算子能够较好的去除伪边缘,定位较准,垂直方向边缘的性能好于斜线方向,然而Roberts算子对噪声敏感,无法抑制噪声的影响,提取图像边缘较粗。
5Laplacian算子是最简单的各向同性微分算子,具有旋转不变性,比较适用于改善因为光线的漫反射造成的图像模板,又Laplacian算子对噪声比较敏感,对于图像纹理特征提取较容易出现伪边缘,图像产生较细的边缘,且对细节有较强的响应较细。
6kirsch方向算子融合后的图像边缘分割能够较好的去除噪音的影响,而且相对于Sobel算子、Prewitt算子、Canny算子、Roberts算子、Lapacian算子而言,图像分割较好,没有伪边缘出现,对噪声不敏感,然而kirsch方向算子根据图像灰度梯度进行处理,丢失了局部的边缘特征,造成特征丢失。
综合上述六种算子,本章提出一种多算子融合的图像边缘提取方法,该方法客户了噪声的影响,严格按照灰度梯度来,模拟人的视觉生理特征,对图像进行边缘提取,该多算子结合Sobel算子、Prewitt算子、Canny算子、Roberts算子、kirsch方向算子的优点,各算子之间相互取并集最终得到相应的图像边缘,采用多算子融合的图像边缘检测,程序如下:
  1. % 图像边缘纹理处理
  2. % 提取每幅图像研究位置的坐标,保持在eyelocs
  3. clc,clear,close all                    % 清屏、清工作区、关闭窗口
  4. warning off                         % 消除警告
  5. feature jit off                        % 加速代码执行
  6. geshi = { '*.bmp','Bitmap image (*.bmp)';...
  7.          '*.jpg','JPEG image (*.jpg)';...
  8.        '*.*','All Files (*.*)'};
  9. [FileName FilePath] = uigetfile(geshi,'导入外部数据',...
  10. '*.bmp','MultiSelect','on');% 选中所有的图片
  11. % 如果选择了图片文件,生成图片文件的完整路径,否则退出程序,不再运行后面命令
  12. if ~isequal([FileName,FilePath],[0,0]);
  13.     FileFullName = strcat(FilePath,FileName);
  14. else
  15.     return;
  16. end
  17. n = length(FileFullName);                          % 选择的图片文件个数
  18. for i = 1 : n
  19.     irow=[];icol=[];img=[];
  20.     % 依次读取每一张图片
  21.     im = imread(FileFullName{i});                 % 读取图像
  22.     if size(im,3)==1
  23.         a=im;
  24.     else
  25.         hsi=rgb2hsi(im);
  26.         H = hsi(:, :, 1);
  27.         S = hsi(:, :, 2);
  28.         I = hsi(:, :, 3);
  29.         a= I;
  30.     %     a= rgb2gray(im);
  31.     end
  32.     a = medfilt2(a,[5,5]);                          % 中值滤波
  33.     b = edge(a,'sobel');                            %% sobel算子
  34.     c = edge(a,'prewitt');                          %% prewitt算子
  35.     d = edge(a,'canny') ;                           %% canny算子
  36.     e = edge(a,'Roberts') ;                         %% Roberts算子
  37.     f = kirsch_algorithm(a);                         %% kirsch方向算子
  38.     p=max(b,c);
  39.     p=min(d,p);
  40.     p=max(e,p);
  41.     p=max(f,p);
  42.     imwrite(p,strcat('.\bw_pic\',num2str(i),'.bmp'),'bmp');
  43. end
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-5-11 22:56 , Processed in 0.238636 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表