这学期计算机实训的作业,期间在找过很多资料。
没在网上找到过相关的完整代码。
从一个小白变成了大白。
最后,成绩下来之时,拿出来给各位分享。
对dicom灰度图像进行抠图,利用灰度划分值实施动态抠图。
最后做成gui,方便交互,动态。
博客好像不能传附件,那就只能上传代码了。
附:matlab对dicom图像抠图之GUI
http://www.ilovematlab.cn/thread-474045-1-1.html
(出处: MATLAB中文论坛,转载请注明出处!)
DICOM文件抠图的程序实现代码【伪代码】
读取DICOM图片并显示原图和概率分布图像:
%定义全局变量
globalX
globalX1
%选择图片路径
[filename,pathname]= ...
uigetfile('C:\Users\Lenovo\Desktop\Matting\nature
image\新建文件夹\*.*','选择图片');
%合成路径+文件名
path= [pathname,filename];
%读取图片
X= dicomread([path]);
size(X);
%显示x的矩阵大小,2维可知x为灰度图
class(X);
%显示x的矩阵类型,可知x为int16
%globalX
X= double(X);
X1= X;
class(X);
a=
max(max(X));
%得到X的最大值
b=
min(min(X));
%得到X的最小值
%将以前的灰度规范到0-255内
X= X + abs(b);
X= floor(X/(a +
abs(b))*255);
%这里注意255*2000可能会越int16的上界,double不会。
X=
uint8(X);
%imshow0-255需要unit8格式
X1= X;
%使用第二个axes
axes(handles.axes2);
%显示图片
imshow(X);
[a1,b1]= size(X1);
%X1 = X1(:)
%hist(X1,256);
C= zeros(1,256);
D= zeros(1,256);
form = 0:255;
for
i = 1:a1
for j = 1:b1
if X1(i,j) == m
C(1,m + 1) = C(1,m + 1) + 1;
end
end
end
end
sum= a1*b1;
%得到0-255的概率值
fori = 1:256
D(1,i) = C(1,i)/sum;
end
%使用第二个axes
axes(handles.axes6);
%画出nature
image的概率分布
plot(0:255,D(:))
抠图程序:
global X
%得到slider的当前数值
sdvalue =get(handles.slider1,'value');
handles.sdvalue =floor(sdvalue);
%取得图像显示的坐标轴
axes(handles.axes3)
[a,b] =size(X);
%得到图像I的灰度矩阵大小a,b
%灰度中黑色为0,白色为255
Y = X;
for i = 1:a
for j = 1:b
if Y(i,j) <= sdvalue
Y(i,j) =
0;
end
end
end
imshow(Y);
set(handles.edit2,'string',num2str(handles.sdvalue));