(一) 用各梯度算子对图像进行边缘检测; 实现代码:
clc;
I=imread('flower.jpg');%读入灰度图像
I1=im2double(I); %将彩图序列变成双精度
f=rgb2gray(I1); %将彩色图变成灰色图
[L,R]=size (f);%图像大小 GR=f; GP=f; GS=f; for x=2:L-1 for y=2:R-1
GRx(x,y)=f(x,y)-f(x+1,y+1); GRy(x,y)=f(x,y+1)-f(x+1,y);
GR(x,y)=sqrt((GRx(x,y)).^2+(GRy(x,y)).^2);%roberts图像边缘提取
GPx(x,y)=(f(x-1,y+1)+f(x,y+1)+f(x+1,y+1))/3-(f(x-1,y-1)+f(x,y-1)+f(x+1,y-1))/3;
GPy(x,y)=(f(x-1,y-1)+f(x-1,y)+f(x-1,y+1))/3-(f(x+1,y-1)+f(x+1,y)+f(x+1,y+1))/3;
GP(x,y)=sqrt((GPx(x,y)).^2+(GPy(x,y)).^2);%prewitt图像边缘提取
GSx(x,y)=(f(x-1,y+1)+2*f(x,y+1)+f(x+1,y+1))/3-(f(x-1,y-1)+2*f(x,y-1)+f(x+1,y-1))/3;
GSy(x,y)=(f(x-1,y-1)+2*f(x-1,y)+f(x-1,y+1))/3-(f(x+1,y-1)+2*f(x+1,y)+f(x+1,y+1))/3;
GS(x,y)=sqrt((GSx(x,y)).^2+(GSy(x,y)).^2);%sobel图像边缘提取 end end
figure; %subplot(2,2,1); imshow(f,[]);title('原图象');
figure;%subplot(2,2,2);
imshow(GR,[]);title('Roberts算子边缘提取'); figure;%subplot(2,2,3);
imshow(GP,[]);title('Prewitt算子边缘提取'); figure;%subplot(2,2,4);
imshow(GS,[]);title('Sobel算子边缘提取');
(二) 利用直方图人工指定阈值对rice进行自动单阈值分割; 源代码:
oldbuf=imread('rice.tif'); subplot(2,2,1); imshow(oldbuf); title('原图像');
[M,N]=size(oldbuf);
sk = imhist(oldbuf); %直方图
up=max(sk);
%纵坐标最大值
subplot(2,2,2),imhist(oldbuf);axis([1 256 0 up]); %原直方图
title('原图像直方图'),ylabel('频数'); xlabel('灰度值'); fori=1:125 sk(i)=0; end
fori=126:M sk(i)=1; end fori=1:M for j=1:N
newbuf(i,j)=sk(oldbuf(i,j)); %映射 end; end
subplot(2,2,3);
imshow(newbuf); title('单阈值分割'); %单阈值分割 I=im2double(oldbuf); se=strel('disk',10);
%创建一个指定大小R平面disk形状的结构化元素。
ft=imtophat(I,se); Th=graythresh(ft);
G=im2bw(ft,Th); subplot(2,2,4); imshow(G);
title('局部阈值分割'); %局部阈值分割
(三) 用迭代法和OSTU法对rice进行自动单阈值分割; 源代码:clearall;closeall;clc; I=imread('coins.png');
J=im2double(I);%索引图像转换为灰度图像 T=graythresh(I);%获得阈值 J=im2bw(I,T);%图像分割 figure;
subplot(121);imshow(I);axis square;xlabel('a) 原图像');
subplot(122);imshow(J);axis square;xlabel('b) Ostu算法分割图像');
clearall;closeall;clc; I1=imread('cameraman.tif');
I=im2double(I1);%将图像灰度值由8位二进制转化为双精度 T0=0.01;%设置参数T0 T1=(min(I(:))+max(I(:)))/2; r1=find(I>T1); r2=find(I<=T1);
T2=(mean(I(r1))+mean(I(r2)))/2; while abs(T2-T1) r1=find(I>T1); r2=find(I<=T1); T2=(mean(I(r1))+mean(I(r2)))/2; end J=im2bw(I,T2);%图像分割 figure; subplot(121);imshow(I1);axis square;xlabel('a) 原图像'); subplot(122);imshow(J);axis square;xlabel('b) 迭代阈值算法分割图像');