📄 total1.m
字号:
N=imread('1_0.jpg');
N=rgb2gray(N);
se = strel('disk', 15);
Itop = imtophat(N, se); % 高帽变换
Ibot = imbothat(N, se); % 低帽变换
figure, imshow(Itop, []); % 高帽变换,体现原始图像的灰度峰值
figure, imshow(Ibot, []); % 低帽变换,体现原始图像的灰度谷值
Ienhance = imsubtract(imadd(Itop, N), Ibot);% 高帽图像与低帽图像相减,增强图像
T=graythresh(Ienhance);
IM=Ienhance>=255*T;
IM=imcomplement(IM);
se=strel('disk',4);
f=imopen(IM,se);
f=imclearborder(f,8);
g=imreconstruct(f,IM);
g=imfill(g,'holes');
[L,num]=bwlabel(g,4);
num
para=zeros(num,9);
for ii=1:num
[r,c]=find(L==ii);
r1=size(r);
xmax=0;
xmin=r(1);
ymax=0;
ymin=c(1);
for i1=1:r1
if r(i1)>xmax
xmax=r(i1);
end
if r(i1)<xmin
xmin=r(i1);
end
if c(i1)>ymax
ymax=c(i1);
end
if c(i1)<ymin
ymin=c(i1);
end
end
sample=Ienhance(xmin:xmax,ymin:ymax);
I=sample;
imwrite(sample,'wo.jpg');
figure,imshow(sample);
%textstate
%
% 注意必须保证二值图像中,细胞区域为白色区域或者像素点值为“1”
[x,y]=size(I);
%@@@@@@@@@@@@@@@@@@@@@@@@@
T=graythresh(I);
IM=sample>=255*T;
IM=imcomplement(IM);
se=strel('disk',2);
f=imopen(IM,se);
g=imreconstruct(f,IM);
g=imfill(g,'holes');
figure,imshow(g)
%@@@@@@@@@@@@@@@@@@@@@@@@@
BW = bwperim(g,8); % 检测细胞的边缘跟踪,用于计算周长
% figure(2);
% imshow(BW);
%检测垂直方向连读的周长像素点%
P1=0;
P2=0;
Ny=0; % 记录垂直方向连续周长像素点的个数
for i=1:x
for j=1:y
if (BW(i,j)>0)
P2=j;
if ((P2-P1)==1) % 判断是否为垂直方向连续的周长像素点
Ny=Ny+1;
end
P1=P2;
end
end
end
%检测水平方向连续的周长像素点%
P1=0;
P2=0;
Nx=0; % 记录水平方向连续周长像素点的个数
for j=1:y
for i=1:x
if (BW(i,j)>0)
P2=i;
if ((P2-P1)==1) % 判断是否为水平方向连续的周长像素点
Nx=Nx+1;
end
P1=P2;
end
end
end
SN=sum(sum(BW)); % 计算周长像素点的总数
Nd=SN-Nx-Ny; % 计算奇数码的链码数目
H=max(sum(I)); % 计算细胞的高度
W=max(sum(I')); % 图象I经矩阵转置后,计算宽度
LL=sqrt(2)*Nd+Nx+Ny; % 计算周长
%====四个形态特征值计算===%
A=bwarea(I); % 计算细胞的面积
C=4*pi*A/(LL*LL); % 计算圆度
R=A/(H*W); % 计算矩形度
E=min(H,W)/max(H,W); % 计算伸长度
para(ii,1)=Nd;
para(ii,2)=H;
para(ii,3)=W;
para(ii,4)=LL;
para(ii,5)=A;
para(ii,6)=C;
para(ii,7)=R;
para(ii,8)=E;
IN=imread('wo.jpg');
para(ii,9)=GrayExitMonentR(IN);
end
Tpara=para'
som(Tpara);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -