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