Vaa3D_windows基于MATLAB批量运行插件_输入多组图片多组参数_以APP2为例

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

首先参考《Vaa3D_批量运行插件方法》
https://blog.csdn.net/jujiyu6446/article/details/102553093

使用场景

在写论文时,需要使用推荐参数跑所有的图片,或者对一张图片跑多个参数组合。
前者是用来验证算法,后者是检验参数的鲁棒性等。
使用dofunc的优势在于
1.不需要打开图片的3D模型,从而加速程序的调用。
2.在需要输入swc或marker文件时,不需要手动拖入。自动化操作,减少人工参与操作,解放生产力。
3.可与自动的SD、SSD检测算法等结合,达到程序自动运行和自动评价的效果。

基本原理

基本的原理就是通过控制台程序调用dofunc
A:在windows下,可以通过
1.直接在cmd控制台下手动输入命令
2.bat 文件调用
3.python 、 matlab等其他语言调用dos命令,简介调用控制台程序
等方式达到调用dofunc的目的。
但是,值得注意的是,如果路径中存在空格,需要将整个路径包含在双引号中,否则将可能导致错误无法识别命令。

或者直接写一个domenu或者dofunc的batch函数。

B:在ubuntu系统中,可以通过运行 .sh 文件的方式调用, 区别在于 1./x 改成 -x 2.也不是exe等 。

windows下调用控制台程序参考形式,此处没有输入/p,para

"D:\v3d_external\bin\vaa3d_msvc.exe"   /x "D:\v3d_external\bin\plugins\neuron_tracing\Vaa3D_Neuron2\vn2.dll" /f "app2"  /i "C:\Users\204\Desktop\fruitfly1.v3draw" 

查看帮助

有些插件写了help的话,将函数名改为“help”可以查看帮助信息。

"D:\v3d_2013\v3d_external\bin\vaa3d_msvc.exe" /x "vn2.dll" /f "help"

parafunc_app2.m 脚本

%by hunan university yufuhao 2019.11.6
%do  APP2 in given folder

%参数组合
threshold = 10:20;

fnameFolder='C:\Users\204\Desktop\';

%待读取图像的后缀名
fileExt = '*.v3dpbd';  

%获取 fnameFolder 文件夹下所有的给定后缀的文件,从而得到所有的图片
%也可以自行指定输入文件名
all_image_name_suffix=dir(fullfile(fnameFolder,fileExt));
fname={all_image_name_suffix.name}';

%根据输入图像创建对应的文件夹
%最终会将输出归档到对应的文件夹
folderSuffix='_APP2';
for ii=1:size(fname,1)
    img_name=fname{ii};
    f_folder=[fnameFolder img_name folderSuffix] ;
    if ~exist(f_folder,'dir')
        mkdir(f_folder); % 若不存在,在当前目录中产生一个子目录
    end
end

%参数表  根据每一个不同的插件要输入不同参数组合
%所有文件都输入绝对路径  以免发生错误
para=cell(1,size(threshold,2)*size(fname,1));
for i=1:size(threshold,2)*size(fname,1)
    para{i}.threshold=threshold(  mod(  (i-1),size(threshold,2)    )   +1);
    para{i}.fname=[fnameFolder fname{mod(floor((i-1)/size(threshold,2)) ,size(fname,1))+1,:}];
end

%对每一个参数表运行APP2程序
try
    for j=1:size(para,2)
        run_app_2(para{j}.fname,para{j}.threshold)
    end
catch
    disp('error ')
end

run_app_2.m 函数

function [] = run_app_2(fname,threshold,b_256cube)
%by hunan university yufuhao 2019.11.6
if ~exist(fname,'file')
    disp([fname ' file not exist'])
    return
end

%指定v3d路径、 函数名
%根据自身电脑路径对应修改
V3DPath='"D:\v3d_2013\v3d_external\bin\vaa3d_msvc.exe" ';
pluginName='"D:\v3d_2013\v3d_external\bin\plugins\neuron_tracing\Vaa3D_Neuron2\vn2.dll"';
funcName='"app2"';
inmarker_file='"NULL"';
channel='"0"'  ;

%给定默认参数 b_256cube
if ~exist('b_256cube', 'var') || isempty(b_256cube)
    % opt_normalize 参数为空,或者不以变量的形式存在;
    b_256cube='0';
end

%b_256cube means auto-downsampled,  1 for yes, and 0 for no

f_folder=[fname '_APP2'] ;
[~,file_base_name,suffix]=fileparts(fname);

%根据输入参数的不同指定输出文件名 避免不同参数组合覆盖之前生成的文件
%call %V3DPath%  /x %pluginName% /f  %funcName% /i %imageName% /p [%inmarker_file% [%channel% [%bkg_thresh% [%b_256cube%]]]] /o %outswc_file%
strr=[ f_folder '\' file_base_name suffix '_threshold_' num2str(threshold) '_b_256cube_' b_256cube '_0611.swc'];
if exist(strr,'file')
    disp([strr ' already exist'])
    return
end
    noshow_file='no_show.txt';
    command=[V3DPath ' /x ' pluginName ' /f ' funcName ' /i "' fname '" /p ' inmarker_file ' ' channel ' ' num2str(threshold) ' ' b_256cube ' ' ' /o "' strr '" >> ' noshow_file]
    
    %调用控制台
    dos(command);
    %输出指令
    disp(command)
    if exist(noshow_file,'file')
        delete(noshow_file)
    end
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值