matlab图像分割程序

clear I=imread('bai.jpg');
q=imadjust(I,[.2 .3 0;.6 .7 1],[]);
j=rgb2gray(q);
j1=im2bw(q,230/255);
se90=strel('line',3,90);
se0=strel('line',3,0);
BW2=imdilate(j1,[se90 se0]);
BW3=bwareaopen(BW2,100);
BW3=~BW3;
BW4=bwareaopen(BW3,20);
BW5=bwperim(BW4);
[imx,imy]=size(BW5);
L=bwlabel(BW5,8);
a=max(max(L));
BW6=bwfill(BW5,'hole');
I2=I;
for i=1:3; I2(:,:,i)=I2(:,:,i).*uint8(BW6);
end imshow(I2); 有大神能逐条解释一下语句吗,本人是菜鸟啊,跪求!!

clear I=imread('bai.jpg'); %读入图像
q=imadjust(I,[.2 .3 0;.6 .7 1],[]); %增强图像的对比度
j=rgb2gray(q); %彩色图像变灰度图像
j1=im2bw(q,230/255);%二值化
se90=strel('line',3,90); %构造元素
se0=strel('line',3,0); %同上
BW2=imdilate(j1,[se90 se0]); % 用构造的元素膨胀
BW3=bwareaopen(BW2,100);%开操作
BW3=~BW3;%取反
BW4=bwareaopen(BW3,20);%开
BW5=bwperim(BW4);%计算BW4周长
[imx,imy]=size(BW5);计算长宽
L=bwlabel(BW5,8);%用不同的数字根据是否连通标记图像,
a=max(max(L));%得到L图像中标记结果的最大值
BW6=bwfill(BW5,'hole');%填充背景
I2=I;
for i=1:3; I2(:,:,i)=I2(:,:,i).*uint8(BW6);
end imshow(I2); 有大神能逐条解释一下语句吗,本人是菜鸟啊,跪求!!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-29
clc
I=double(imread('source3.bmp')); %读入图像
I1=I;
%I=rgb2gray(I);
BW1=edge(I,'roberts'); % roberts算子
BW2=edge(I,'prewitt');
BW3=edge(I,'sobel');
BW4=edge(I,'log');
BW5= edge(I,'canny');
figure,
subplot(231),imshow(I,[]);title('原图');
subplot(232),imshow(BW1); title(' roberts算子');
subplot(233),imshow(BW2); title(' prewitt算子');
subplot(234),imshow(BW3); title(' sobel算子');
subplot(235),imshow(BW4); title(' log算子');
subplot(236),imshow(BW5); title(' canny算子');
% 双峰法是一种简单的阈值分割方法,即如果灰度级直方图呈现明显的双峰状,
% 则选双峰之间的谷底所对应的灰度级作为阈值分割。
I = imread('source3.bmp');
if ndims(I) == 3
I = rgb2gray(I);
end
fxy = imhist(I, 256); %统计每个灰度值的个数
figure;
subplot(2, 2, 1); imshow(I, []); title('原图')
subplot(2, 2, 2); plot(fxy); %画出灰度直方图
title('直方图')
p = 180/255;
bw = im2bw(I, p); %小于阈值的为黑,大于阈值的为白
subplot(2, 2, 3); imshow(bw); title('双峰阈值分割')
bw1 = im2bw(I, graythresh(I));
subplot(2, 2, 4); imshow(bw1); title('ostu阈值分割')
相似回答