如何利用matlab按照图形从图片中分割出来

如何利用matlab按照图形从图片中分割出来,第1张

你需要先知道每一个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程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9288474.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存