您的当前位置:首页正文

数字图像处理上机实验三

2021-04-18 来源:我们爱旅游
医学图像处理 实验三

1、 计算图像的梯度,梯度值和梯度角。

I=imread('C:\\Users\\Administrator\\Desktop\\cat.jpg'); B=rgb2gray(I); C=double(B); e=1e-6;%10^-6

[dx,dy]=gradient(C);%计算梯度 G=sqrt(dx.*dx+dy.*dy);%梯度幅值

figure,imshow(uint8(G)),title('梯度图像'); pha=atan(dy./(dx+e)) figure,imshow(pha,[])

图 1

图 2 梯度角图

2、 计算图像边缘检测,用滤波器方式实现各种算子。 (1)Roberts算子 clear;

I=imread('C:\\Users\\admin\\Desktop\\mao.jpg'); B=rgb2gray(I); [m,n]=size(B); nB=B;

robertsnum=0;%经roberts算子计算得到的每一个像素的值 robertsthreshold=0.6;%设定阈值 for j=1:m-1;%进行边界提取 for k=1:n-1

robertsnum=abs(B(j,k)-B(j+1,k+1))+abs(B(j+1,k)-B(j,k+1)); if(robertsnum>robertsthreshold) nB(j,k)=255; else

nB(j,k)=0; end end end

subplot(1,2,1);imshow(B);title('原图');

subplot(1,2,2);imshow(nB,[]);title('Robert算子处理后的图像');

图 3

(2)Sobel算子 clear;

I=imread('C:\\Users\\admin\\Desktop\\mao.jpg'); B=rgb2gray(I); [m,n]=size(B); f=double(B); u=double(B); usobel=B;

for i=2:m-1%sobel边缘检测 for j=2:n-1;

gx=(u(i+1,j-1)+2*u(i+1,j)+f(i+1,j+1)-(u(i-1,j-1)+2*u(i-1,j)+f(i-1,j+1))); gy=(u(i-1,j+1)+2*u(i,j+1)+f(i+1,j+1)-(u(i-1,j-1)+2*u(i,j-1)+f(i+1,j-1)));

usobel(i,j)=sqrt(gx^2+gy^2); end end

subplot(1,2,1);imshow(B);title('原图');

subplot(1,2,2);imshow(im2uint8(usobel));title('Sobel边缘检测后的图像');

图 4

(3)Prewitt算子 clear;

I=imread('C:\\Users\\admin\\Desktop\\mao.jpg'); B=rgb2gray(I); [m,n]=size(B); nB=B;

prewittnum=0;%经prewitt算子计算得到的每一个像素的值

prewittthreshold=0.6;%设定阈值 for j=2:m-1;%进行边界提取 for k=2:n-1

prewittnum=abs(B(j-1,k+1)-B(j+1,k+1))+B(j-1,k)-B(j+1,k)+B(j-1,k-1)-B(j+1,k-1)+abs(B(j-1,k+1)+B(j,k+1)+B(j+1,k+1)-B(j-1,k-1)-B(j,k-1)-B(j+1,k-1)); if(prewittnum>prewittthreshold) nB(j,k)=255; else

nB(j,k)=0; end end end

subplot(1,2,1);imshow(B);title('原图');

subplot(1,2,2);imshow(nB,[]);title('Prewitt算子处理后的图像');

图 5

(4)Laplace边缘检测

function flapEdge=LaplaceEdge(pic,Moldtype,thresh) [m,n]=size(pic);

flapEdge=zeros(m,n);

%四邻域拉普拉斯边缘检测算子 if 4==Moldtype for i=2:m-1

for j=2:n-1

temp=-4*pic(i,j)+pic(i-1,j)+pic(i+1,j)+pic(i,j-1)+pic(i,j+1); if temp>thresh

flapEdge(i,j)=255; else

flapEdge(i,j)=0; end end end end

%八邻域拉普拉斯边缘检测算子 if 8==Moldtype for i=2:m-1

for j=2:n-1

temp=-8*pic(i,j)+pic(i-1,j)+pic(i+1,j)+pic(i,j-1)+pic(i,j+1)+pic(i-1,j-1)+pic(i+1,j+1)+pic(i+1,j-1)+pic(i-1,j+1);

if temp>thresh

flapEdge(i,j)=255; else

flapEdge(i,j)=0; end end end end

主函数: clear;

I=imread('C:\\Users\\admin\\Desktop\\mao.jpg'); B=rgb2gray(I); C=double(B); t=60;

Lapmodtype=8;%设置模板方式

flapEdge=LaplaceEdge(C,Lapmodtype,t); fgrayLapedge=uint8(flapEdge); figure()

imshow(fgrayLapedge),title('laplace边缘检测图像');

图 6

(4)Kirsch算子 clear clc

close all

I=imread('C:\\Users\\admin\\Desktop\\mao.jpg'); B=rgb2gray(I); figure(1) imshow(B,[])

title('原始图象')

%对图象进行均值滤波

bw2=filter2(fspecial('average',3),B);

%对图象进行高斯滤波

bw3=filter2(fspecial('gaussian'),bw2);

%利用小波变换对图象进行降噪处理

[thr,sorh,keepapp]=ddencmp('den','wv',bw3); %获得除噪的缺省参数 bw4=wdencmp('gbl',bw3,'sym4',2,thr,sorh,keepapp);%图象进行降噪处理

%---------------------------------------------------------------------

%提取图象边缘

t=3000; %设定阈值

bw5=double(bw4); [m,n]=size(bw5); g=zeros(m,n); d=zeros(1,8);

%利用Kirsch算子进行边缘提取 for i=2:m-1 for j=2:n-1 d(1)

=(5*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2; d(2)

=((-3)*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2; d(3)

=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)+5*bw5(i+1,j+1))^2; d(4)

=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2; d(5)

=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2; d(6)

=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)-3*bw5(i+1,j+1))^2; d(7)

=(5*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;

d(8)

=(5*bw5(i-1,j-1)+5*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2; g(i,j) = max(d); end end

%显示边缘提取后的图象

for i=1:m

for j=1:n if g(i,j)>t

bw5(i,j)=255; else

bw5(i,j)=0; end end end figure(2)

imshow(bw5,[]) title('Kirsch ')

图 7

(5)LoG和canny算子 clear;

I=imread('C:\\Users\\admin\\Desktop\\mao.jpg'); B=rgb2gray(I);

bw1=edge(B,'log',0.01);

bw3=edge(B,'canny',0.1); figure;

subplot(1,2,1);imshow(bw1,[]);title('loG边缘检测'); subplot(1,2,2);imshow(bw3,[]);title('canny边缘检测');

图 8

3、 大津法实现图像分割

clear;

I=imread('C:\\Users\\admin\\Desktop\\cat.jpg'); B=rgb2gray(I);

T = graythresh(B);%求阈值 BW = im2bw(B,T);%二值化 imshow(BW,[])

图 9

因篇幅问题不能全部显示,请点此查看更多更全内容