logo资料库

SVM道路检测.doc

第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
资料共33页,剩余部分请下载后查看
 Matlab求二值图像的周长  
1. [代码]matlab函数实现图像锐化    
MATLAB示例程序001--OSTU大津法/最大类间方差
Matlab函数bwmorph简介
  函数功能: 对二值图像进行数学形态学(Mathematical Morphology)运算。
  语法格式:
  BW2 = bwmorph(BW,operation)
  对二值图像进行指定的形态学处理。
  BW2 = bwmorph(BW,operation,n)
  对二值图像进行n次指定的形态学处理。 n可以是Inf(无穷大),这意味着将一直对该图像做同样的形
  operation是一个字符串, 用于指定进行的形态学处理类型, operation可以为以下值
  'bothat':进行“bottom hat”形态学运算,即返回源图像减去闭运算的图像;
  'branchpoints':找到骨架中的分支点;
  'bridge':进行像素连接操作;
  'clean':去除图像中孤立的亮点,比如, 一个像素点,像素值为1,其周围像素的像素值全为0,
  'close':进行形态学闭运算(即先腐蚀后膨胀);
  'diag': 采用对角线填充, 去除八邻域的背景;
  'dilate': 使用结构元素ones(3)对图像进行膨胀运算;
  'endpoints':找到骨架中的结束点;
  'erode':使用结构元素ones(3)对图像进行腐蚀运算;
  'fill':填充孤立的黑点, 比如3*3的矩阵,除了中间元素为0外,其余元素全部为1,则这个0
  'hbreak':断开图像中的H型连接;
  'majority':如果一个像素的8邻域中有等于或超过5个像素点的像素值为1, 则将该点像素值
  'open':进行形态学开运算(即先膨胀后腐蚀);
  'remove':如果一个像素点的4邻域都为1,则该像素点将被置0;该选项将导致边界像素上的1被
  'skel':在这里n = Inf,骨架提取但保持图像中物体不发生断裂;不改变图像欧拉数;
  'spur':去除小的分支, 或引用电学术语“毛刺”;
  'thicken':在这里n = Inf, 通过在边界上添加像素达到加粗物体轮廓的目的;
  'thin':在这里n = Inf,进行细化操作;
  'tophat':进行“top hat”形态学运算, 返回源图像减去开运算的图像;
Matlab函数——bwperim
%输出图像 %在原图直方图上加标题 matlab 图像分割算法源码 图像读取及灰度变换 I=imread('cameraman.tif');%读取图像 subplot(1,2,1),imshow(I) title('原始图像') %在原始图像中加标题 subplot(1,2,2),imhist(I) %输出原图直方图 title('原始图像直方图') 图像旋转 I = imread('cameraman.tif'); figure,imshow(I); theta = 30; K = imrotate(I,theta); % Try varying the angle, theta. figure, imshow(K) 边缘检测 I = imread('cameraman.tif'); J1=edge(I,'sobel'); J2=edge(I,'prewitt'); J3=edge(I,'log'); subplot(1,4,1),imshow(I); subplot(1,4,2),imshow(J1); subplot(1,4,3),imshow(J2); subplot(1,4,4),imshow(J3); 1.图像反转 MATLAB 程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1); H=uint8(J); %图像反转线性变换 subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度线性变换 MATLAB 程序实现如下: I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像'); axis([50,250,50,200]); axis on; %显示坐标系 I1=rgb2gray(I);
subplot(2,2,2),imshow(I1); title('灰度图像'); axis([50,250,50,200]); axis on; %显示坐标系 J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1] subplot(2,2,3),imshow(J); title('线性变换图像[0.1 0.5]'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系 K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1] subplot(2,2,4),imshow(K); title('线性变换图像[0.3 0.7]'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系 3.非线性变换 MATLAB 程序实现如下: I=imread('xian.bmp'); I1=rgb2gray(I); subplot(1,2,1),imshow(I1); title('灰度图像'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系 J=double(I1); J=40*(log(J+1)); H=uint8(J); subplot(1,2,2),imshow(H); title('对数变换图像'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系
4.直方图均衡化 MATLAB 程序实现如下: I=imread('xian.bmp'); I=rgb2gray(I); figure; subplot(2,2,1); imshow(I); subplot(2,2,2); imhist(I); I1=histeq(I); figure; subplot(2,2,1); imshow(I1); subplot(2,2,2); imhist(I1); 5.线性平滑滤波器 用 MATLAB 实现领域平均法抑制噪声程序: I=imread('xian.bmp'); subplot(231) imshow(I) title('原始图像') I=rgb2gray(I); I1=imnoise(I,'salt & pepper',0.02); subplot(232) imshow(I1) title('添加椒盐噪声的图像') k1=filter2(fspecial('average',3),I1)/255; %进行 3*3 模板平滑滤波 k2=filter2(fspecial('average',5),I1)/255; %进行 5*5 模板平滑滤波 k3=filter2(fspecial('average',7),I1)/255; %进行 7*7 模板平滑滤波 k4=filter2(fspecial('average',9),I1)/255; %进行 9*9 模板平滑滤波 subplot(233),imshow(k1);title('3*3 模板平滑滤波'); subplot(234),imshow(k2);title('5*5 模板平滑滤波'); subplot(235),imshow(k3);title('7*7 模板平滑滤波'); subplot(236),imshow(k4);title('9*9 模板平滑滤波');
6.中值滤波器 用 MATLAB 实现中值滤波程序如下: I=imread('xian.bmp'); I=rgb2gray(I); J=imnoise(I,'salt&pepper',0.02); subplot(231),imshow(I);title('原图像'); subplot(232),imshow(J);title('添加椒盐噪声图像'); k1=medfilt2(J); %进行 3*3 模板中值滤波 k2=medfilt2(J,[5,5]); %进行 5*5 模板中值滤波 k3=medfilt2(J,[7,7]); %进行 7*7 模板中值滤波 k4=medfilt2(J,[9,9]); %进行 9*9 模板中值滤波 subplot(233),imshow(k1);title('3*3 模板中值滤波'); subplot(234),imshow(k2);title('5*5 模板中值滤波'); subplot(235),imshow(k3);title('7*7 模板中值滤波'); subplot(236),imshow(k4);title('9*9 模板中值滤波'); 7.用 Sobel 算子和拉普拉斯对图像锐化: I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像'); axis([50,250,50,200]); grid on; axis on; I1=im2bw(I); %显示网格线 %显示坐标系 subplot(2,2,2),imshow(I1); title('二值图像'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系 H=fspecial('sobel'); %选择 sobel 算子 J=filter2(H,I1); %卷积运算 subplot(2,2,3),imshow(J); title('sobel 算子锐化图像'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系
h=[0 1 0,1 -4 1,0 1 0]; %拉普拉斯算子 J1=conv2(I1,h,'same'); %卷积运算 subplot(2,2,4),imshow(J1); title('拉普拉斯算子锐化图像'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系 8.梯度算子检测边缘 用 MATLAB 实现如下: I=imread('xian.bmp'); subplot(2,3,1); imshow(I); title('原始图像'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系 I1=im2bw(I); subplot(2,3,2); imshow(I1); title('二值图像'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系 I2=edge(I1,'roberts'); figure; subplot(2,3,3); imshow(I2); title('roberts 算子分割结果'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系 I3=edge(I1,'sobel'); subplot(2,3,4); imshow(I3); title('sobel 算子分割结果');
axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系 I4=edge(I1,'Prewitt'); subplot(2,3,5); imshow(I4); title('Prewitt 算子分割结果'); axis([50,250,50,200]); grid on; axis on; %显示网格线 %显示坐标系 9.LOG 算子检测边缘 用 MATLAB 程序实现如下: I=imread('xian.bmp'); subplot(2,2,1); imshow(I); title('原始图像'); I1=rgb2gray(I); subplot(2,2,2); imshow(I1); title('灰度图像'); I2=edge(I1,'log'); subplot(2,2,3); imshow(I2); title('log 算子分割结果'); 10.Canny 算子检测边缘 用 MATLAB 程序实现如下: I=imread('xian.bmp'); subplot(2,2,1); imshow(I); title('原始图像') I1=rgb2gray(I); subplot(2,2,2); imshow(I1); title('灰度图像');
I2=edge(I1,'canny'); subplot(2,2,3); imshow(I2); title('canny 算子分割结果'); 11.边界跟踪(bwtraceboundary 函数) clc clear all I=imread('xian.bmp'); figure imshow(I); title('原始图像'); I1=rgb2gray(I); %将彩色图像转化灰度图像 threshold=graythresh(I1); %计算将灰度图像转化为二值图像所需的门限 BW=im2bw(I1, threshold); %将灰度图像转化为二值图像 figure imshow(BW); title('二值图像'); dim=size(BW); col=round(dim(2)/2)-90; %计算起始点列坐标 row=find(BW(:,col),1); %计算起始点行坐标 connectivity=8; num_points=180; contour=bwtraceboundary(BW,[row,col],'N',connectivity,num_points); %提取边界 figure imshow(I1); hold on; plot(contour(:,2),contour(:,1), 'g','LineWidth' ,2); title('边界跟踪图像'); 12.Hough 变换 I= imread('xian.bmp'); rotI=rgb2gray(I); subplot(2,2,1); imshow(rotI);
title('灰度图像'); axis([50,250,50,200]); grid on; axis on; BW=edge(rotI,'prewitt'); subplot(2,2,2); imshow(BW); title('prewitt 算子边缘检测后图像'); axis([50,250,50,200]); grid on; axis on; [H,T,R]=hough(BW); subplot(2,2,3); imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit'); title('霍夫变换图'); xlabel('\theta'),ylabel('\rho'); axis on , axis normal, hold on; P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:)))); x=T(P(:,2));y=R(P(:,1)); plot(x,y,'s','color','white'); lines=houghlines(BW,T,R,P,'FillGap',5,'MinLength',7); subplot(2,2,4);,imshow(rotI); title('霍夫变换图像检测'); axis([50,250,50,200]); grid on; axis on; hold on; max_len=0; for k=1:length(lines) xy=[lines(k).point1;lines(k).point2]; plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green'); plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow'); plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red'); len=norm(lines(k).point1-lines(k).point2); if(len>max_len)
分享到:
收藏