你在这里
弹性微图纹基底的简单单元牵引力脚本
嗨,读者,
这是我和合作者写的MATLAB代码,我们希望能让更广泛的研究团体使用。该程序旨在以与Maloney等人在“有限厚度对柔韧基板细胞黏附诱导变形的影响”中类似的方式跟踪基板上微图案化点的位移。物理评论E. 2008。
该程序仅适用于MATLAB,并使用来自研究/MATLAB社区的其他成员的程序来跟踪基板表面上标记的“斑点”的位移,足够间隔(约5um或更大),以便它们不会相互干扰。我们希望最终能加入一些其他细节,比如影响相邻点或距离超过5um的点的力的应用,以及提高程序的自动化水平。
感谢你的阅读和尝试!如果您有任何建议,请留下。我们将发布文章的链接,在文章发布后演示如何应用它的技术和方法。
在弹性凝胶上计算牵引力的脚本%%%
5.0版-由:Samuel Polio, Katheryn Rothenberg, Dimitrije Stamenovic和Michael Smith撰写和贡献
波士顿大学生物医学工程系
% %
%uncomment用于在计算前清除所有内容
%关闭全部;
%明显;
M = [];
Pk = [];
CNT = [];
A = [];
B = [];
Pos = [];
注意,值需要输入YOUR参数,请相应地调整XX的位置
mcircle_dia = XX;最大圆直径% um
post_dist = XX;单位之间的距离%
pixel_ratio = XX;每像素um的百分比
Pixel_dia = round(mcircle_dia / pixel_ratio);圆的最大像素直径%
Pix_post_dist = post_dist/pixel_ratio;帖子之间的距离%,单位为像素
获取dot文件!
initial_file = uigetfile('*.tif','选择点文件');
%已读取到.tif文件
Initial_image = double(imread(initial_file, 'tif'));
%显示图像
colormap(灰色);
显示亮度图像(initial_image);
%请冻结来自:
%http://www.mathworks.com/matlabcentral/fileexchange/7943-freezecolors-unfreezecolors
freezeColors
%乔治敦宏…请从http://physics.georgetown.edu/matlab/
Bp = bpass(initial_image,5,pixel_dia);%带通图像删除背景
M = max(max(bp))*.1;最亮特征估计的百分比
Pk = pkfnd(bp, m, pixel_dia);找到所有的峰值位置
CNT = cntrd(bp,pk,pixel_dia+2);%准确定位峰值质心
持有;
情节(问(:1)、问(:,2),“x”);
数字
情节(问(:1)、问(:,2),“x”);
%选择点的绘图为角
datacursormode;
Fig_handle = gcf;
抓住;
Pos = 0 (4,2);
因为我= 1:4,
choice = menu('选择点后按Enter','Enter');
而选择= = 0
choice = menu('选择点后按Enter','Enter');
结束
%暂停();
Dcm_obj = datacursormode(fig_handle);
info = getCursorInfo(dcm_obj);
pos(i,1) = info.Position(1);
pos(i,2) = info.Position(2);
情节(pos(我,1),pos(我,2),“处方”);
结束
把4个角放入程序…在下面找到这个程序
(x, y) = FourCorners (pos (1:), pos (2:), pos (3:), pos (4:));
%设置时间为0和1,以便程序知道连接哪些点
Xy = [x,y];
Xy (:,3) = 1;
问(:,3)= [];
问(:,3)= 0;
T_pos = [cnt;xy];
Tracked = track(t_pos, 30);
计数= 0;
对于I = 1:(长度(跟踪)-1)
如果跟踪(i,4) ==跟踪(i+1,4)
Count = Count +1;
P1 (count,1) =跟踪(i,1);
P1 (count,2) =跟踪(i,2);
P2 (count,1) =跟踪(i+1,1);
P2 (count,2) =跟踪(i+1,2);
结束
结束
“误差”是指如果没有位移,但人们可以把它看作是误差
位移的%大小
错误=√(p1 (: 1) p2(: 1))。^ 2 + (p1 (:, 2) p2 (:, 2)) ^ 2);
cell_image_file = uigetfile('*.tif','Pick The Dot File', 'F:\03_30_11');%绘图图像的单元格与箭头
%显示图形
图;
colormap(灰色)
一次取消注释以下其中一个以显示作用力
%用于显示点位移,取消注释
显示亮度图像(双(imread (initial_file)))
%用于显示亮场图像上的位移,取消注释
%显示亮度图像(双(imread (initial_file)))
持有;
freezeColors
A = p1 - p2;图像的%位移
Thresh2 = 0;像素点的阈值位移
Under = find(error < thresh2);%,将阈值以下的点设置为0
当I = 1:length(under)时,
A(在(i)下,1)= 0;
A(在(i)下,2)= 0;
结束
colormap(“喷气机”)
%力显示在最终位置和比例,如果你把点放在
%初始位置(p2),然后用quiverc(x,y,u1,u2,0)进行缩放,可以显示
%点的实际位移
%quiverc来自Bertrand Dano,http://www.mathworks.com/matlabcentral/fileexchange/3225-quiverc
quiverc(p1(:,1), p1(:,2), A(:,1), A(:,2));
得到力/位移矢量大小
Disp = error*pixel_ratio;
%凝胶力学数据中的力大小
从Maloney等人计算弹簧常数。“有限厚度的影响
%的细胞黏附诱导变形的柔顺基底”。物理评论E. 2008。
%对于较大的点或相互干扰的点,即使它们
%没有被拉上,需要使用不同的参数
nu = XX;%泊松比
dot_radius = XX;%米
Elastic_mod = XX;%帕斯卡
k = pi()*(Elastic_mod*dot_radius)/((1+nu)*(2-nu)); N/m中凝胶的弹性常数%
K_nano = k*10^3;%弹簧常数在nN/um
力= Disp*k_nano;%nN
力和位移的向量
D_Vec = A*pixel_ratio;
F_Vec = D_Vec*k_nano;
正在设置绘图轴%%
N = 5;
max_F = max(Force);%max总力和单元数,可以更改为位移显示以及。
sep = max_F/N;刻度间隔百分比-(分母)- 1
%硬编码的轴标签
Num1 = num2str(0,'%6.2f');
Num2 = num2str(sep,'%6.2f');
Num3 = num2str(sep*2,'%6.2f');
Num4 = num2str(sep*3,'%6.2f');
Num5 = num2str(sep*4,'%6.2f');
Num6 = num2str(sep*5,'%6.2f');
hcb = colorbar('YTickLabel', {num1,num2,num3,num4,num5,num6});
Cax_vals = caxis;
Cax_width = (cax_vals(2)-cax_vals(1))/5;
设置(hcb, YTick, [cax_vals (1) cax_vals (1) + cax_width cax_vals (1) + 2 * cax_width……
cax_vals (1) + 3 * cax_width cax_vals (1) + 4 * cax_width cax_vals (1) + 5 * cax_width]);
结束程序%%
FourCorners.m
函数[Xf Yf] = FourCorners(pos1, pos2, pos3, pos4,距离)
函数FourCorners包含4组表示4的xy对
点网格的%角。这个想法是用这4个角来校准
两个正交轴上点间距离的%。程序需要一个轻微的瓷砖工作正常。
%distance =点与点之间的距离,单位为像素
%找到角落
P = [pos1;pos2;pos3;pos4];
dist = 0(长度(P)-1,1);
i = 1;
求各点之间的距离,2之间的距离最长
%点将在对角线上,用于不淘汰之间的配对
%在绘制网格时,第一个点和那个点
for i = 2:(长度(P))
J = i-1;
Dist (j,1) = i;
dist (j, 2 =√(P (1,1) - P (i, 1)) ^ 2 + (P(1、2)- P (i, 2)) ^ 2);
结束
[~,ma] = max(dist(:,2));%在对角
[~,mi] = min(dist(:,2));%值不想用于下一个
找出不在对角线上的最长距离,以得到最佳平均值
%沿长度
对于I = 1:length(dist),
如果dist(我,2)~ = max (dist (:, 2)) & & dist(我,2)~ = min (dist (:, 2));
Conn = dist(i,1);
结束
结束
set1 = [pos1;P(conn,:)];将数据整理成理论上的平行线
set2 = [P(dist(mi,1),:);P (dist(马,1),:));
得到两条直线的方程
S1 = polyfit(set1(:,1),set1(:,2),1);
S2 = polyfit(set2(:,1),set2(:,2),1);
%手动输入
%问用户点之间的点数
s = sprintf('在点%d,%d和%d,%d之间有多少个点?\n',…
Set1 (1,1), Set1 (1,2), Set1 (2,1), Set1 (2,2));
Num_parallel = input(s);
%自动输入
%num_s = sqrt((set1(1,1)-set1(2,1))。^ 2 + (set2(1、2)中的-set1 (2, 2)) ^ 2);
%num_p = (num_s)/distance;
%num_parallel = round(num_p);
计算平行线上各点之间的x距离
Total_d_parallel_1x = set1(1,1)-set1(2,1);
Sep_parallel_1x = abs(total_d_parallel_1x / (num_parallel+1));
Total_d_parallel_2x = set2(1,1)-set2(2,1);
Sep_parallel_2x = abs(total_d_parallel_2x / (num_parallel+1));
%预分配速度…
X1 = 0 (num_parallel+2,1);
Y1 = 0 (num_parallel+2,1);
X2 = 0 (num_parallel+2,1);
Y2 = 0 (num_parallel+2,1);
“绘制”网格点沿着每条平行线到点第一行
当I = 1:num_parallel+2时,
如果set1(1,1) X1 (i) = set1(1,1)+(i-1)*sep_parallel_1x; Y1 (i) = s1(1)*x1(i)+s1(2); elseif set2(1, 1) >中的set2(1、2)中的 如果不对,就倒退 X1 (i) = set1(1,1)-(i-1)*sep_parallel_1x; Y1 (i) = s1(1)*x1(i)+s1(2); 结束 结束 %“画”格点沿每条平行线到点第二条线 当I = 1:num_parallel+2时, 如果set2(1,1) X2 (i) = set2(1,1)+(i-1)*sep_parallel_2x; Y2 (i) = s2(1)*x2(i)+s2(2); elseif关于我校(1,1)>关于我校(1、2) 如果不对,就倒退 X2 (i) = set2(1,1)-(i-1)*sep_parallel_2x; Y2 (i) = s2(1)*x2(i)+s2(2); 结束 结束 手动计算要放在中间的点的数量 s = sprintf('在点%d,%d和%d,%d之间有多少个点?\n',… Set1 (1,1), Set1 (1,2),set2(1,1), set2(1,2)); Num_perp =输入(s); %自动输入 % num_perp =圆(√(set2(1, 1)中的关于我校(1,1))^ 2 + (set2(1、2)中的关于我校(1、2))^ 2))/距离); Xf = []; Yf = []; 对于I = 1:长度(x1) S = polyfit([x1(i);x2(i)],[y1(i);y2(i)],1); Sep_perp_x = abs((x1(i)-x2(i))/(num_perp_+ 1)); 当k = 1时,num_perp+2, 如果x1(i) X(k) = x1(i)+(k-1)*sep_perp_x; Y(k) = s(1)*X(k)+s(2); elseif x1 (i) > x2(我) 如果不对,就倒退 X(k) = x1(i)-(k-1)*sep_perp_x; Y(k) = s(1)*X(k)+s(2); 结束 结束 Xf = [Xf;X']; Yf = [Yf;Y']; 结束 结束
![订阅“弹性微图案基板的简单细胞牵引力脚本”的评论](http://m.limpotrade.com/misc/feed.png)
评论
你好,我正在学习细胞
您好,我正在学习细胞力学,牵引力在我的研究中有很大的兴趣和意义。我相信你的方法是新颖和有效的,因此这就是为什么我给它一个机会。
我的问题是……我只是想知道你是否会把这个脚本放在一个mfile或多个mfile上…我不是MatLab专家,所以目前我被困在有正确格式的脚本。
任何快速的回复都将非常感激……谢谢。