你在这里
弹性微花纹基质的单细胞牵引力脚本
嗨,读者,
这是由我和合作者编写的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 = [];
请注意,数值需要与您的参数一起输入,请相应地调整XX的位置
mcircle_dia = XX;最大圆直径%,单位:um
post_dist = XX;在um中,柱子之间的距离为%
pixel_ratio = XX;每像素的um数%
Pixel_dia = round(mcircle_dia / pixel_ratio);圆形像素的最大直径%
pix_post = post_dist/pixel_ratio;%柱子之间的距离,以像素为单位
%获取点文件!
initial_file = uigetfile('*.tif','Pick The Dot File');
%读取。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 = pkfind (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,
选择=菜单('选择点后按回车','回车');
而选择= = 0
选择=菜单('选择点后按回车','回车');
结束
%暂停();
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),“处方”);
结束
把四个角放入程序中……在下面找到这个程序
(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];
track = track(t_pos, 30);
Count = 0;
对于I = 1:(length(tracked)-1)
If tracked(i,4) == tracked(i +1,4)
Count = Count +1;
P1 (count,1) = tracked(i,1);
P1 (count,2) = tracked(i,2);
P2 (count,1) = tracked(i+1,1);
P2 (count,2) = tracked(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:长度(下),
A(< (i),1) = 0;
A(在(i)下,2)= 0;
结束
colormap(“喷气机”)
%的力显示在最终位置和缩放,如果你把点
%初始位置(p2),然后用quiverc(x,y,u1,u2,0)取消缩放,您可以显示
点的实际位移
来自伯特兰·达诺的颤抖,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);%最大总力和单元数,也可以更改为位移来显示。
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 = cax;
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
function [Xf Yf] = FourCorners(pos1, pos2, pos3, pos4, distance)
函数FourCorners接受4组表示4的xy对
点网格的每个角。这个想法是使用这4个角来校准
%两个正交轴上点之间的距离。程序需要一个轻微的瓷砖工作正常。
%distance =点与点之间以像素为单位的距离
%找到角落
P = [pos1;pos2;pos3;pos4];
dist = 0 (length(P)-1,1);
i = 1;
求每个点之间的距离,最长的距离为2
%点将在对角线上,用于不淘汰配对之间
第一个点和画网格时的那个点
for i = 2:(length(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));%value不想用于下一个
找出不在对角线上的最长距离,得到最好的平均值
沿长度%
对于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)/距离;
%num_parallel = round(num_p);
%计算平行线上两点之间的x距离
Total_d_parallel_1x = set1(1,1)-set1(2,1);
sep_parallel1x = abs(total_d_parallel1x / (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 = input(s); %自动输入 % num_perp =圆(√(set2(1, 1)中的关于我校(1,1))^ 2 + (set2(1、2)中的关于我校(1、2))^ 2))/距离); Xf = []; Yf = []; 对于I = 1:length(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)
评论
你好,我正在学习细胞
你好,我正在学习细胞力学,牵引力在我的研究中是很有兴趣和意义的。我相信你的方法是新颖和有效的,因此这就是为什么我要给它一个机会。
我的问题是……我只是想知道你是否会把这个脚本放在一个文件或多个文件…我不是MatLab专家,所以目前我被困在有脚本在正确的格式。
任何快速回复都将是非常感激的…谢谢。