部分图像分割的方法matlab.docx
- 文档编号:13051465
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:9
- 大小:31.18KB
部分图像分割的方法matlab.docx
《部分图像分割的方法matlab.docx》由会员分享,可在线阅读,更多相关《部分图像分割的方法matlab.docx(9页珍藏版)》请在冰点文库上搜索。
部分图像分割的方法matlab
部分图像分割的方法(matlab)
大津法:
functiony1=OTSU(image,th_set)
image=imread('color1.bmp');
gray=rgb2gray(image);%原图像的灰度图
low_high=stretchlim(gray);%增强图像,似乎也不是一定需要
gray=imadjust(gray,low_high,[]);
%subplot(224);imshow(gray);title('afteradjust');
count=imhist(gray);
[r,t]=size(gray);
n=r*t;
l=256;
count=count/n;%各级灰度出现的概率
fori=2:
l
ifcount(i)~=0
st=i-1;
break
end
end
%以上循环语句实现寻找出现概率不为0的最小灰度值
fori=l:
-1:
1
ifcount(i)~=0;
nd=i-1;
break
end
end
%实现找出出现概率不为0的最大灰度值
f=count(st+1:
nd+1);
p=st;q=nd-st;%p和分别是灰度的起始和结束值
u=0;
fori=1:
q;
u=u+f(i)*(p+i-1);
ua(i)=u;
end
程序二:
clc; clear;
cd 'D:
\My Documents\MATLAB' time = now;
I = imread('qr4.bmp');
figure
(1),imshow(I),title('p1_1.bmp'); % show the picture
I2 = rgb2gray(I);
figure
(2),imshow(I2),title('I2.bmp'); %ÖÐÖµÂ˲¨
J = medfilt2(I2); figure(3),imshow(J);
imwrite(J,'J.bmp'); [M N] = size(J);
J1 = J(1:
M/2,1:
fix(N/2)); J2 = J(1:
M/2,fix(N/2)+1:
N); J3 = J(M/2+1:
M, 1:
fix(N/2)); J4 = J(M/2+1:
M, fix(N/2)+1:
N); % figure(4), img = J1;
T1 = test_gray2bw( img ); % figure(5), img = J2;
T2 = test_gray2bw( img ); % figure(6), img = J3;
T3 = test_gray2bw( img ); % figure(7), img = J4;
T4 = test_gray2bw( img ); T = [T1,T2;T3,T4]; figure,imshow(T)
% T1 = edge(T,'sobel'); % figure,imshow(T1); % BW = edge(T,'sobel'); % figure,imshow(BW);
function [bw_img] = test_gray2bw( img ) %大津法
[row_img col_img ] = size( img ) all_pix = row_img * col_img
% get probability of each pixel(ÏñËØ). count_pix = zeros(1,256) % pro_pix = []
for i = 1 :
1 :
row_img for j = 1 :
1 :
col_img
count_pix(1,img(i,j)+1) = count_pix(1,img(i,j)+1) + 1 %ͳ¼Æ´ÎÊý end end
pro_pix = count_pix / all_pix
% choose k value; max_kesi = -1 T = 0
for k = 1 :
1 :
while( i <= k )
wa = wa + pro_pix(1,i+1) %Ç°k¸öi£¬Ã¿¸öÏñËصĻҶȸÅÂÊ£¬¸ÅÂÊºÍ ua = ua + i * pro_pix(1,i+1) i = i + 1 end
if ( wa == 0.0 ) continue; else
ua = ua / wa end
ub = 0 wb = 0 i = k + 1
while( i <= 255 )
wb = wb + pro_pix( 1 , i + 1 )
ub = ub + i * pro_pix( 1 , i + 1 ) i = i + 1 end
if ( wb == 0.0 ) continue; else
ub = ub / wb end
u = wa * ua + wb * ub
% kesi = wa * ( ua - u ) * ( ua - u ) + wb * ( ub - u ) * ( ub -u ) % %ÉÏÏÂÕâÁ½¸ö¹«Ê½Êǵȼ۵Ä
kesi = wa * wb * (ua - ub)^2; if( kesi > max_kesi ) max_kesi = kesi T = k end end
% get bw img bw_img = img
for i = 1 :
1 :
row_img for j = 1 :
1 :
col_img if ( img(i,j) <= T ) bw_img(i,j) = 0
else
bw_img( i,j ) = 255 end end end
imwrite(bw_img,'bw_img.bmp')
figure(),imshow('bw_img.bmp')%,title('bw_ing')
区域生长法:
closeall;
clearall;
clc;
A=dicomread('im.dcm');
%读入图像(医学CT图像)
%seed=[200,220];
%选择起始位置
thresh=6.3;
%相似性选择阈值
%A=rgb2gray(A0);
%A=A0;
%灰度化
%A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]);
figure,
imshow(A,[]);
A=double(A);%将图像灰度化
[y,x]=getpts;%获得区域生长起始点
x1=round(x);%横坐标取整
y1=round(y);%纵坐标取整
seed=A(x1,y1);
B=A;
%将A赋予B
[r,c]=size(B);
%图像尺寸r为行数,c为列数
n=r*c;
%计算图像所包含点的个数
pixel_seed=seed;
%原图起始点灰度值
q=[x1y1];
%q用来装载起始位置
top=1;
%循环判断flag
M=zeros(r,c);
%建立一个与原图形同等大小的矩阵
M(x1,y1)=1;
%将起始点赋为1,其余为0
count=1;
%计数器
whiletop~=0
%也可以写成top!
=0循环结束条件
r1=q(1,1);
%起始点行位置
c1=q(1,2);
%起始点列位置
p=A(r1,c1);
%起始点灰度值
dge=0;
fori=-1:
1
%周围点的循环判断
forj=-1:
1
ifr1+i<=r&r1+i>0&c1+j<=c&c1+j>0
%保证在点周围范围之内
ifabs(A(r1+i,c1+j)-p)<=thresh&M(r1+i,c1+j)~=1
%判定条件?
top=top+1;
%满足判定条件top加1,top为多少,则q的行数有多少行
q(top,:
)=[r1+ic1+j];
%将满足判定条件的周围点的位置赋予q,q记载了满足判定的每一外点
M(r1+i,c1+j)=1;
%满足判定条件将M中相对应的点赋为1
count=count+1;
%统计满足判定条件的点个数,其实与top此时的值一样
B(r1+i,c1+j)=1;
%满足判定条件将B中相对应的点赋为1
end
ifM(r1+i,c1+j)==0;
%如果M中相对应点的值为0将dge赋为1,也是说这几个点不满足条件
dge=1;
%将dge赋为1
end
else
dge=1;
%点在图像外将dge赋为1
end
end
end
%此时对周围几点判断完毕,在点在图像外或不满足判定条件则将dge赋为1,满足条件dge为0
ifdge~=1
%最后判断的周围点(i=1,j=1)是否满足条件,如dge=0,满足。
dge=1,不满足。
B(r1,c1)=A(x1,y1);
%将原图像起始位置灰度值赋予B
end
ifcount>=n
%如果满足判定条件的点个数大于等于n
top=1;
end
q=q(2:
top,:
);
top=top-1;
end
%subplot(1,2,1),
figure,
imshow(M,'displayrange',[]);
figure,
%subplot(1,2,2),
imshow(B,[]);
%最后是做的一个例子
迭代法:
clearall;
I=imread('rice.png');
ZMAX=max(max(I)); %取出最大灰度值
ZMIN=min(min(I)); %取出最小灰度值
TK=(ZMAX+ZMIN)/2;
bcal=1;
ISIZE=size(I); %读出图像大小
while(bcal)
iForeground=0; %定义前景和背景数
iBackground=0;
ForegroundSum=0; %定义前景和背景灰度总和
BackgroundSum=0;
fori=1:
ISIZE
(1) %循环部分求解读下%
forj=1:
ISIZE
(2)
tmp=I(i,j);
if(tmp>=TK)
iForeground=iForeground+1;
ForegroundSum=ForegroundSum+double(tmp); %前景灰度值
else
iBackground=iBackground+1;
BackgroundSum=BackgroundSum+double(tmp);
end
end
end
ZO=ForegroundSum/iForeground; %计算前景和背景的平均值
ZB=BackgroundSum/iBackground;
TKTmp=uint8(ZO+ZB)/2;
if(TKTmp==TK)
bcal=0;
else
TK=TKTmp;
end %当阈值不再变化的时候,说明迭代结束
end
disp(strcat('迭代后的阀值:
',num2str(double(TK)))); %显示迭代计算后阈值TK
newI=im2bw(I,double(TK)/255);
subplot(1,2,1);imshow(I);
xlabel('(a)原始图像');
subplot(1,2,2);imshow(newI);
xlabel('(b)迭代法分割效果图') %程序OK 没问题
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 部分 图像 分割 方法 matlab