很多临床病症表现为白细胞数目增多、肿大或者白细胞中细胞核形状与数目发生变化,所以对白细胞数目和形状的研究有着重要意义。但是由于染色条件、涂片制备、图像来源、采样光照条件的差异以及细胞间相互重叠、粘连情况的发生,使得对白细胞的计数和识别等后续分析变得困难。为此,将粘连细胞分割成为单个细胞,就成为医学图像处理中必须解决的问题。本文基于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);
完整代码添加QQ1575304183