Vaa3D_MATLAB计算SD、SSD

20 篇文章 0 订阅
12 篇文章 1 订阅

在追踪结束以后,常需要计算追踪结果的SD和SSD,通过这三个文件可以实现SD、SSD的计算,通过与批量插件运行相结合可以直接得到结果,然后该结果可以在matlab中进行下一步的处理,如写入到excel文件中等。
同理,在CalculateMetric.m文件中可以再加入其他的测量指标,如DIADEM metric等。


CalculateMetric.m 函数

function [MetricOut] = CalculateMetric(groudTruthName,inputswc)
%CalculateMetric 计算SD、SSD

MetricOut=zeros(2,1);

%对应修改
V3DIOPATH='D:\v3d_2013\v3d_external\matlab_io_basicdatatype';
addpath(V3DIOPATH)

if ~exist(groudTruthName,'file')
    disp([groudTruthName ' input file not exist'])
    return
end
if ~exist(inputswc,'file')
    disp([inputswc ' input file not exist'])
    return
end

MetricOut(1,1)=calculat_neuron_SD(groudTruthName,inputswc);
MetricOut(2,1)=calculat_neuron_SSD(groudTruthName,inputswc);

end

calculat_neuron_SD.m 函数

function [ result ] = calculat_neuron_SD(true_ground_truth_name,true_experiment_name) 
% V3DPATH='C:\Users\204\Desktop\data analyse\DiademMetric\matlab_io_basicdatatype';
% addpath(V3DPATH)
swc_file_experiment_name=[true_experiment_name   '.swc'];
swc_file_groundtruth_name=[true_ground_truth_name '.swc'];
run_resample_swc(true_ground_truth_name,1,swc_file_groundtruth_name);
run_resample_swc(true_experiment_name,1,swc_file_experiment_name);

swc_gt_read=load_v3d_swc_file(swc_file_groundtruth_name);
swc_exp_read=load_v3d_swc_file(swc_file_experiment_name);
swc_gt=swc_gt_read(:,3:5);
swc_exp=swc_exp_read(:,3:5);

sum_distance=0;
for i=1:length(swc_exp)
    min_distance=10000;
   for j=1:length(swc_gt)
      distance=sqrt(((swc_gt(j,1)-swc_exp(i,1))^2+(swc_gt(j,2)-(swc_exp(i,2)))^2+(swc_gt(j,3)-swc_exp(i,3))^2));
      if distance<min_distance
          min_distance=distance;
      end
   end
   sum_distance=min_distance+sum_distance;
end
mean_distance=sum_distance/length(swc_exp);


reverse_sum_distance=0;
for i=1:length(swc_gt)
    min_distance=10000;
   for j=1:length(swc_exp)
      distance=sqrt(((swc_exp(j,1)-swc_gt(i,1))^2+(swc_exp(j,2)-(swc_gt(i,2)))^2+(swc_exp(j,3)-swc_gt(i,3))^2));
      if distance<min_distance
          min_distance=distance;
      end
   end
   reverse_sum_distance=min_distance+reverse_sum_distance;
end
reverse_mean_distance=reverse_sum_distance/length(swc_gt);
result=(mean_distance+reverse_mean_distance)/2;
if exist(swc_file_experiment_name,'file')
    delete(swc_file_experiment_name)
end

if exist(swc_file_groundtruth_name,'file')
    delete(swc_file_groundtruth_name)
end

end


calculat_neuron_SSD.m 函数

function [ result ] = calculat_neuron_SSD(true_ground_truth_name,true_experiment_name)
% V3DPATH='C:\Users\204\Desktop\data analyse\DiademMetric\matlab_io_basicdatatype';
% addpath(V3DPATH)
swc_file_experiment_name=[true_experiment_name   '.swc'];
swc_file_groundtruth_name=[true_ground_truth_name '.swc'];
run_resample_swc(true_ground_truth_name,1,swc_file_groundtruth_name);
run_resample_swc(true_experiment_name,1,swc_file_experiment_name);

swc_gt_read=load_v3d_swc_file(swc_file_groundtruth_name);
swc_exp_read=load_v3d_swc_file(swc_file_experiment_name);
swc_gt=swc_gt_read(:,3:5);
swc_exp=swc_exp_read(:,3:5);

false_num=0;
sum_min_distance=0;
for i=1:length(swc_gt)
    min_distance=200;
   for j=1:length(swc_exp)
      distance=sqrt(((swc_exp(j,1)-swc_gt(i,1))^2+(swc_exp(j,2)-(swc_gt(i,2)))^2+(swc_exp(j,3)-swc_gt(i,3))^2));
      if distance<min_distance
          min_distance=distance;
      end
   end     
   if min_distance>2
       sum_min_distance=sum_min_distance+min_distance;
       false_num=false_num+1;
   end
end
SSD=sum_min_distance/false_num;

reverse_false_num=0;
reverse_sum_min_distance=0;
for i=1:length(swc_exp)
    reverse_min_distance=200;
   for j=1:length(swc_gt)
      distance=sqrt(((swc_exp(i,1)-swc_gt(j,1))^2+(swc_exp(i,2)-(swc_gt(j,2)))^2+(swc_exp(i,3)-swc_gt(j,3))^2));
      if distance<reverse_min_distance
          reverse_min_distance=distance;
      end
   end     
   if reverse_min_distance>2
       reverse_sum_min_distance=reverse_sum_min_distance+reverse_min_distance;
       reverse_false_num=reverse_false_num+1;
   end
end
reverse_SSD=reverse_sum_min_distance/reverse_false_num;

result=(reverse_SSD+SSD)/2;

if exist(swc_file_experiment_name,'file')
    delete(swc_file_experiment_name)
end

if exist(swc_file_groundtruth_name,'file')
    delete(swc_file_groundtruth_name)
end

end

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值