matlab 血管自动提取,我有个视网膜血管提取的matlab程序问题,求大神帮忙修改...

这段代码展示了如何对视网膜眼底图像进行预处理,并利用匹配滤波器进行血管检测。首先将RGB图像转换为灰度图像,然后应用不同尺度和方向的高斯滤波器进行匹配,通过比较不同方向的最大响应来确定最佳血管特征。最后,显示匹配滤波后的图像。
摘要由CSDN通过智能技术生成

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

f=imread('01_test.tif');

f=rgb2gray(f);

figure,imshow(f,[]);

title('视网膜眼底图像灰度图像');

f=double(f);

%参数设置

os=12;%检测方向个数

tim=3;%用于截断高斯曲线

L=9;%先将血管想象成一小段一小段的平行区域的组合,设定长度为L

T=40;%阈值选择

step = [1 1.5 2 3 3.5 4];

%尺度循环,选取尺度

for is = 1:6

sigma = step(is);

thetas=0:(os-1);%取0到11

thetas=thetas.*(180/os);%.*表示两相同维度的矩阵对应元素相乘

%表示每次相对于起始位置旋转的角度

N1=-tim*sigma:tim*sigma;%用±3sigma截断高斯曲线

N1=-exp(-(N1.^2)/2*sigma*sigma);%N1的每个元素的2次幂

N=repmat(N1,[2*floor(L/2)+1,1]);%由N1组成的(2*floor(L/2)+1)X1的矩阵

RNs=cell(1,os);

MFRs=cell(1,os);

%匹配滤波器,方向循环

for i=1:os %从1到os的元素

theta=thetas(i);

RN=imrotate(N,theta);%将图像N绕中心点旋转theta角度

%去除多余的0行0列

RN=RN(:,any(RN));%any函数用于判断是否非零

RN=RN(any(RN'),:);%'表示转置

meanN=mean2(RN);%mean2(RN)相当于 mean(mean(RN)),mean(a)默认求各列均值

RN=RN-meanN;

RNs{1,i}=RN;

MFRs{1,i}=imfilter(f,RN,'conv','symmetric');

end

%获取最大响应

g=MFRs{1,1};

for j=2:os

g=max(g,MFRs{1,j});

end

figure,imshow(g,[]);

title('匹配滤波后的图像');

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值