一、简介
1 基本概念
(1)什么是图像分割?
图像分割是指把图像分成各个具有相应特性的区域并提取出感兴趣的目标的技术和过程。
特性可以是灰度、颜色、纹理等;目标可以对应单个区域,也可以对应多个区域。
(2)分类
按幅度不同来分割各个区域:幅度分割
按边缘来划分各个区域:边缘检测
按形状不同来分割各个区域:区域分割
灰度图像的分割通常基于图像亮度的两个基本特性:不连续性和相似性。区域内部的像素一般具有灰度相似性,而区域之间的边界上一般具有灰度不连续性。
由此衍生出的图像分割方法有:间断检测、阈值分割法和区域分割法。

2 点检测与线检测
利用区域之间的不连续性分割涉及:
间断检测——检测点、线和边缘
边缘组装——组合成边界
门限处理——在边缘检测时,需要定义区分不同区域的特征,那么特征值的分界点就是一个门限。
(2)点检测

【图像分割】视网膜图像分割matlab源码_图像处理

(2)线检测
线检测需要考虑方向性

【图像分割】视网膜图像分割matlab源码_matlab_02【图像分割】视网膜图像分割matlab源码_图像处理_03
3 边缘检测
(1)区别“边缘”与“线”
边缘——图像局部区域特征不相同的那些区域间的分界线
线——具有很小宽度的其中间区域具有相同的图像特征的边缘对
(2) 什么是边缘检测?
图像灰度发生跳变的地方是“边缘”;
基于灰度图像像素的灰度值在空间的不连续性对图像作出的一种分割。
(3) 图像边缘的分类

【图像分割】视网膜图像分割matlab源码_图像处理_04

(4)图像边缘的描述
方向
幅度
沿边缘走向方向,其幅度值变化较平缓,而沿垂直于边缘走向方向其幅度值变化较剧烈。

(5)图像边缘的判据
边缘检测最常用的方法是检测亮度值的不连续性,这种不连续在数学上用一阶和二阶微分来刻画。

【图像分割】视网膜图像分割matlab源码_matlab_05

在边缘处,图像的一阶导数的幅度值较大,并在其附近形成一个峰值,其峰值的大小和极性反映了边缘点的强度和方向。
图像的二阶导数在边缘处取零值,且在零值的左右两侧分别存在极性相反的两个波峰;其波峰的大小和走向反映了边缘点的强度和方向。
(6)一阶微分边缘检测算子
梯度算子
Roberts算子
Sobel算子
Prewitt算子
(7)二阶微分边缘检测算子
拉普拉斯算子
LOG算子(马尔算子/墨西哥草帽)
DOG算子
canny边缘检测
(7.1) Canny 边缘检测
7.1.1 Canny边缘检测的基本原理

图像边缘检测必须满足的两个条件:(1)能有效地抑制噪声;(2)必须尽量精确确定边缘的位置
根据对信噪比与定位乘积进行测度,得到最优化逼近算子;
先平滑后求导数
7.1.2 什么才算是“最优边缘检测”?

弱边缘也有强相应——算法应尽可能多地标识出图像中的实际边缘;
良好的定位——标识出的边缘应尽可能接近实际图像中的边缘;
一个边缘只有一次检测
7.1.3 Canny边缘检测算法的步骤

去噪——使用高斯滤波器平滑图像;
用一阶偏导的有限差分来计算梯度的幅值与方向;
对梯度幅值进行非极大值抑制;(保证定位精确,且边缘足够细)
使用双阈值算法检测和连接边缘。(保证边缘识别的准确率)
(8)边缘检测MATLAB实现

 
  • 1.
  1. BW=edge(I,method,threshold,direction,'nothinning');

  2. BW=edge(I,method,threshold,direction,sigma);

其中,I为检测图像;BW为输出结果;method为检测算子类型(‘Canny’,‘log’,‘Prewitt’,‘Roberts’,‘Sobel’,'zerocross’等);
threshold为阈值;direction用于指定图像的方向;'nothnning’表明不需要对图像进行细化处理;
sigma用于指定LOG算子、Canny算子中的高斯核标准差。

二、源代码

clc;
clear all;
close all;
 
%Read Input Retina Image
inImg = imread('Input.bmp');
dim = ndims(inImg);
if(dim == 3)
    %Input is a color image
    inImg = rgb2gray(inImg);
end
function bloodVessels = VesselExtract(inImg, threshold)
 
%Kirsch's Templates
h1=[5 -3 -3;
    5  0 -3;
    5 -3 -3]/15;
h2=[-3 -3 5;
    -3  0 5;
    -3 -3 5]/15;
h3=[-3 -3 -3;
     5  0 -3;
     5  5 -3]/15;
h4=[-3  5  5;
    -3  0  5;
    -3 -3 -3]/15;
h5=[-3 -3 -3;
    -3  0 -3;
     5  5  5]/15;
h6=[ 5  5  5;
    -3  0 -3;
    -3 -3 -3]/15;
h7=[-3 -3 -3;
    -3  0  5;
    -3  5  5]/15;
h8=[ 5  5 -3;
     5  0 -3;
    -3 -3 -3]/15;
 
%Spatial Filtering by Kirsch's Templates
t1=filter2(h1,inImg);
t2=filter2(h2,inImg);
t3=filter2(h3,inImg);
t4=filter2(h4,inImg);
t5=filter2(h5,inImg);
t6=filter2(h6,inImg);
t7=filter2(h7,inImg);
t8=filter2(h8,inImg);
 
s=size(inImg);
bloodVessels=zeros(s(1),s(2));
temp=zeros(1,8);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.

三、运行结果

【图像分割】视网膜图像分割matlab源码_matlab_06