【细胞分割】基于形态学算法实现红细胞计数matlab源码含 GUI

该文介绍了一个使用MATLAB实现的血液细胞图像处理系统,旨在解决因染色和图像条件差异导致的细胞计数难题。通过图像预处理、分水岭算法和阈值分割,实现了粘连细胞的分离和红细胞的自动统计。设计流程包括图像转灰度、二值化、中值滤波、形态学操作等步骤,最终达到了精确计数红细胞的目标。
摘要由CSDN通过智能技术生成

一、简介

 

很多临床病症表现为白细胞数目增多、肿大或者白细胞中细胞核形状与数目发生变化,所以对白细胞数目和形状的研究有着重要意义。但是由于染色条件、涂片制备、图像来源、采样光照条件的差异以及细胞间相互重叠、粘连情况的发生,使得对白细胞的计数和识别等后续分析变得困难。为此,将粘连细胞分割成为单个细胞,就成为医学图像处理中必须解决的问题。本文基于MATLAB语言进行图像的处理以及分割,准确的处理图片,采用分水岭算法和阈值分割来实现,在现有研究基础之上,重点基于数字图像处理技术解决显微图像细胞计数这一思路,结合血液红细胞的主要特点,设定所要达到的目标和要求,设计和实现一个快速有效的血液显微图像红细胞数量自动统计系统。

1 课程设计任务
细胞数目检测在现实生活中的意义主要体现在医学上的作用,可通过细胞数目的检测来查看并估计病人或动物的血液中细胞数,如估测血液中红细胞、白细胞、血小板、淋巴细胞等细胞的数目,同时也可检测癌细胞的数目来查看医疗效果,根据这一系列的指标来对病人或动物进行治疗。
(1)对细胞图像进行预处理;
(2)进行图像分割;
(3)统计细胞数目;
(4)要求自行设计方案,编写代码实现上述功能,并设计细胞统计的软件界面。

2 设计原理
图像分割是根据医学图像的某个可以处理的特性(如光学密度值、灰度值、CT值、频谱等),利用医学图像区域内的相似性和区域间的差异性将医学图像分割成若干个互不连通区域的过程。
将图像表示为物理上有意义的连通区域的集合,也就是根据目标与背景的先验知识,对图像中的目标、背景进行标记、定位,然后将目标从背景或其他伪目标中分离出来。由于这些被分割的区域在某些特性上相近,因而,图像分割常用于模式识别与图像理解以及图像压缩与编码两大类不同的应用目的。

3 设计流程
流程:首先将图像依次转化为灰度图像,二值图像。然后对二值图像进行中值滤波,并删除小面积对象(删除白色底面里面的黑色小点)。 其次,将图像反相,并删除小面积对象(相当于删除了二值图像里面黑色底面的白色小点)。 再次,对图像进行形态学运算处理。最后,标记红细胞,用贴标签的方法统计红细胞数目,目标实现。
在这里插入图片描述

二、源代码

function varargout = untitled(varargin)
% UNTITLED M-file for untitled.fig
%      UNTITLED, by itself, creates a new UNTITLED or raises the existing
%      singleton*.
%
%      H = UNTITLED returns the handle to a new UNTITLED or the handle to
%      the existing singleton*.
%
%      UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in UNTITLED.M with the given input arguments.
%
%      UNTITLED('Property','Value',...) creates a new UNTITLED or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before untitled_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to untitled_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
 
% Edit the above text to modify the response to help untitled
 
% Last Modified by GUIDE v2.5 02-Dec-2015 08:59:09
 
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @untitled_OpeningFcn, ...
                   'gui_OutputFcn',  @untitled_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
 
if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
 
 
% --- Executes just before untitled is made visible.
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to untitled (see VARARGIN)
 
% Choose default command line output for untitled
handles.output = hObject;
 
% Update handles structure
guidata(hObject, handles);
 
% UIWAIT makes untitled wait for user response (see UIRESUME)
% uiwait(handles.figure1);
 
 
% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
% Get default command line output from handles structure
varargout{1} = handles.output;
 
 
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
axes(handles.axes1);
I=imread('blood.BMP');
 imshow(I);
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
 
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
axes(handles.axes2);
I=imread('blood.BMP');
 imshow(I);
gg=im2bw(I);
imshow(gg)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
 
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
axes(handles.axes2);
I=imread('blood.BMP');
imshow(I);
gg=im2bw(I);
imshow(gg)
J=medfilt2(gg,[3 3]);
imshow(J);
% hObject    handle to pushbutton5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
 
% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
axes(handles.axes2);
I=imread('blood.BMP');
imshow(I);
gg=im2bw(I);
imshow(gg)
J=medfilt2(gg,[3 3]);
imshow(J);
M=gg|J;
imshow(M);
% hObject    handle to pushbutton6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
 
% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
axes(handles.axes2);
I=imread('blood.BMP');
imshow(I);
gg=im2bw(I);
imshow(gg)
J=medfilt2(gg,[3 3]);
imshow(J);
M=gg|J;
imshow(M);
R=~M;
imshow(R)
% hObject    handle to pushbutton7 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
 
% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
axes(handles.axes2);
I=imread('blood.BMP');
imshow(I);
gg=im2bw(I);
imshow(gg)
J=medfilt2(gg,[3 3]);
imshow(J);
M=gg|J;
imshow(M);
R=~M;
imshow(R)
F=bwfill(R,'holes');
imshow(F);

三、运行结果

在这里插入图片描述

  • 0
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值