用matlab检测斑马鱼重心

来源:互联网 发布:bilibili直播软件 mac 编辑:程序博客网 时间:2024/05/19 18:10
clc;
clear;


img1=imread('E:\matlab\zebrafish\zebrafish.jpg');
figure('name','显示原始图像');
imshow(img1);


img2 = rgb2gray(img1);     %转换成灰度图像
figure('name','显示灰度图像');
imshow(img2);


%thresh = graythresh(img2);   %获取转换成二值图像的阈值
img3 = im2bw(img2,0.64); %转换为二值图像,手动调整阈值,保证斑马鱼外轮廓比较准确
figure('name','显示二值图像');
imshow(img3);


img4 = bwareaopen(img3,4300); %删除二值图像img3中面积小于500的对象
figure('name','显示滤除内部噪声后的图像');
imshow(img4);


img5=1-img4;%图像反转
figure('name','显示反转后的图像');
imshow(img5);


img5 =bwareaopen(img5,53000);    %去噪,阈值选取很大,其实是要去掉鱼身体外部的痕迹,只留下整个鱼身
figure('name','显示滤除外部噪声及重心标记后的图像');
imshow(img5);
hold on ; %维持图像,保证坐标能被标记在img5上


S=regionprops(img5,'Centroid');   %求出鱼身的重心坐标,坐标信息存在S.Centroid
plot(S.Centroid(1),S.Centroid(2),'+');   %用+标记重心点
result=sprintf(' (%.1f,%.1f)',S.Centroid);  
text(S.Centroid(1),S.Centroid(2),result);%将坐标以文本的形式标记在img5上
hold off;


%求出鱼身体部分的像素个数
S=regionprops(img5,'Area');
a=S.Area;
%a=131686
0 0
原创粉丝点击