用户登录

你在这里

弹性微花纹基质的单细胞牵引力脚本

嗨,读者,

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

结束

结束

评论

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

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

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

订阅评论“弹性微花纹基质的简单细胞牵引力脚本”

最近的评论

更多的评论

辛迪加

认购辛迪加