用户登录

你在这里

弹性微图纹基底的简单单元牵引力脚本

嗨,读者,

这是我和合作者写的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'];

结束

结束

评论

您好,我正在学习细胞力学,牵引力在我的研究中有很大的兴趣和意义。我相信你的方法是新颖和有效的,因此这就是为什么我给它一个机会。

我的问题是……我只是想知道你是否会把这个脚本放在一个mfile或多个mfile上…我不是MatLab专家,所以目前我被困在有正确格式的脚本。

任何快速的回复都将非常感激……谢谢。

订阅“弹性微图案基板的简单细胞牵引力脚本”的评论

最近的评论

更多的评论

辛迪加

订阅辛迪加