
你需要先知道每一个O占的大小 比如占88个像素 SkipStep=8;%每一个O的大小 和遍历的补偿 M=8; N=8; n=0;%编号 I=imread('jpg'); I=rgb2gray(I);%灰度转化 [H,W]=size(I); xStepNum = floor((W-N)/SkipStep+1);%朝负无穷方向取整 宽度方向block移动的次数 yStepNum = floor((H-M)/SkipStep+1);%朝负无穷方向取整 高度y方向移动的次数 for j=1:xStepNum%一列一列来取的 for m=1:yStepNum n=n+1; PImg=I((m-1)SkipStep+1:(m-1)SkipStep+M,(k-1)SkipStep+1:(k-1)SkipStep+N);%分割图像 y='jpg'; w=strcat(n,'',y); imwrite(PImg,w);%保存分割出来的 格式为jpg 名字为编号n end end 但是这样也把不是O的取出来了,你可以知道没有O的地方的n 你到时候不用即可
阈值分割就是针对灰度图像的,通过设定一个阈值可以在分割后达到二值化的效果。对彩色图像进行阈值分割,当然也是转成灰度图后进行分割了。
假如你对各个颜色分量分别进行阈值化,我给你试了试
a=imread('ajpg');
[m,n,d]=size(a);
threshold=90;
for i=1:m
for j=1:n
for k=1:3
if a(i,j,k)>90
a(i,j,k)=255;
else a(i,j,k)=0;
end
end
end
end
a_origin=a;
a(:,:,2)=0;
a(:,:,3)=0;
subplot(121),imshow(a);
subplot(122),imshow(a_origin);
效果就是,单个颜色分量的可以阈值分割,但是一起分割就效果不理想了
image_1=imread('E:\ebook\lenabmp'); %读入
image_1=rgb2gray(image_1);%灰度化
[m,n]=size(image_1);%计算的像素点个数,行列,n是列数,Gray
num=zeros(1,256);%存放各灰度级出现的次数
p=zeros(1,256);%存放各灰度级的比率
image_1=double(image_1);%双精度化
for i=1:m
for j=1:n
num(image_1(i,j)+1)=num(image_1(i,j)+1)+1;%统计各灰度级的像素点个数
end
end
for i=1:256
p(i)=num(i)/(mn);%计算各灰度级出现的比率
end
for i=2:256
if p(i)~=0
st=i+1;%实现寻找出现比率不为0的最小灰度值
break
end
end
for i=256:-1:1
if p(i)~=0;
nd=i-1;%实现找出出现比率不为0的最大灰度值
break
end
end
%以下程序实现利用最小方差和法找出门阈值
w=inf; th=0;
for t=st:nd%最小非零比率灰度值到最大非零比率灰度值
qt1=0; qt2=0;%前景后景像素点比率
u1=0; u2=0;%前景后景均值
v1=0; v2=0;%
for i=1:t
qt1=qt1+p(i);
end
for i=1:t
u1=u1+ip(i)/qt1;
end
for i=1:t
v1=v1+((i-u1)^2)p(i)/qt1;
end
for i=t+1:256
qt2=qt2+p(i);
end
for i=t+1:256
u2=u2+ip(i)/qt2;
end
for i=t+1:256
v2=v2+((i-u2)^2)p(i)/qt2;
end
if qt1v1+qt2v2<w
th=t; w=qt1v1+qt2v2 ;
end
end
for i=1:m
for j=1:n
if (image_1(i,j)+1>th)
image_2(i,j)=255;
else
image_2(i,j)=0;
end
end
end
image_2=uint8(image_2);%读入读出变换
figure,imshow(image_2);%显示二值化后的
matlab图像的剪切
函数imcrop实现对图像的剪切 *** 作。格式如下:
B=imcrop(A);
B=imcrop(X,map)
B=imcrop(RGB)
以上实现交互式的对灰度图像,索引图像和真彩色图像的剪切 *** 作。
B=imcrop(I,rect)
B=imcrop(A,map,rect)
B=imcrop(RGB,rect)
分别指定举行区域rect剪切图像,rect是一个4元向量[xmin,ymin,width,height]。[B,rect]=imcrop(…)
[x,y,B,rect]=imcrop()返回剪切框参数。
[E_W] = func_wavelet_packet(seg_image,level,type);这里的小波函数我2007版MATLAB没有,运行不了,但是若有这个函数的话,程序应该可以运行吧,都是用for做的,while也是一定会跳出来的,应该很慢,因为有很多层for嵌套。
代码写错了
%% 迭代阈值选择法二值化图像与Otsu阈值选择法二值化图像比较
clc;
clear all;
close all;
f=imread('8_256_lenabmp','bmp');
subplot(2,2,1);
subimage(f);title('原始图像');
f=double(f);
T=(min(f(:))+max(f(:)))/2;
done=false;
i=0;
while ~done
r1=find(f<=T);
r2=find(f>T);
Tnew=(mean(f(r1))+mean(f(r2)))/2;
done=abs(Tnew-T)<1;
T=Tnew;
i=i+1;
end
f(r1)=0;
f(r2)=1;
subplot(2,2,2);
subimage(f);title('迭代阈值二值化图像图像');
f=imread('8_256_lenabmp','bmp');
subplot(2,2,3);
subimage(f);title('原始图像');
T=graythresh(f);
g=im2bw(f,T);
subplot(2,2,4);
subimage(g);title('Otsu方法二值化图像');
以上就是关于如何利用matlab按照图形从图片中分割出来全部的内容,包括:如何利用matlab按照图形从图片中分割出来、matlab彩色图像的阈值分割、求一个用otsu算法的图像分割matlab程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)