matlab数字图像处理提取边缘

您所在的位置:网站首页 图像处理边缘提取matlab matlab数字图像处理提取边缘

matlab数字图像处理提取边缘

#matlab数字图像处理提取边缘| 来源: 网络整理| 查看: 265

基于matlab的图像Hough边缘提取 一、课程设计要求

  “0-4房屋图像1.jpg”和“0-5房屋图像2.jpg”是房屋立面的图像。请利用Hough变换检测,计算获得矢量化的房屋边缘特征。

二、设计思路

  首先先将彩色图片进行灰度处理,然后通过边缘检测算子,如Roberts算子,Prewitt算子,LoG算子……对目标图像边缘进行检测。   其次,用均值滤波或者中值滤波对边缘检测后的图像进行去噪处理,去掉图像上的一些影响图像边缘提取的噪点。(这里有个小问题,最好先对原图像进行滤波处理再将处理过的图像进行边缘检测,因为没时间了就不做修改了,还有算子的话最好自己再加个canny算子提取效果会更好)   接着,将图像进行二值化处理,转化为黑白图片   最后,通过Hough变换检测,将边缘描绘出来得出最终的提取效果。

三、总体设计

  使用matlab app进行图形界面化设计,要求能够从文件夹中读取文件并在界面上展示,设计多种边缘检测算子与滤波处理和二值化处理,能够在界面上显示处理效果。并能将最后的效果保存到指定的文件夹中。

四、代码实现 1.文件的打开与读取

打开文件夹,将内容显示在UIAxes的框框内

function ButtonPushed(app, event) [filename,filepath]=uigetfile({'*.jpg','*.png'},'选择图片'); if isequal(filename,0)||isequal(filepath,0) errordlg('没有选中的文件','错误'); else file=strcat(filepath,filename); end im=imread(file); app.originimg = im; app.gim=rgb2gray(im); app.gim = im2double(app.gim); imshow(im,'Parent',app.UIAxes); end 2.边缘检测算子的实现

①LoG算子

function log = log_margin(app,img) [m,n]=size(img); log=zeros(m,n); for i=3:m-2 for j=3:n-2 log(i,j) = -img(i-2,j)-img(i-1,j-1)-2*img(i-1,j)-img(i-1,j+1)-img(i,j+2)-2*img(i,j-1)+16*img(i,j)-2*img(i,j+1)-img(i,j+2)-img(i+1,j-1)-2*img(i+1,j)-img(i+1,j+1)-img(i+2,j); end end end

②Prewitt算子

function pre = prewitt_margin(app,f) [m,n]=size(f); pre=zeros(m,n); for i=2:m-1 for j=2:n-1 pre(i,j)=abs(f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)-f(i-1,j+1)-f(i,j+1)-f(i+1,j+1))+abs(f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)-f(i-1,j-1)-f(i-1,j)-f(i-1,j+1)); end end end

③Sobel算子

function sob = sobel_margin(app,image) [m,n]=size(image); sob=zeros(m,n); for i=2:m-1 for j=2:n-1 sob(i,j)=abs(image(i-1,j-1)+2*image(i,j-1)+image(i+1,j-1)-image(i-1,j+1)-2*image(i,j+1)-image(i+1,j+1))+abs(image(i+1,j-1)+2*image(i+1,j)+image(i+1,j+1)-image(i-1,j-1)-2*image(i-1,j)-image(i-1,j+1)); end end end

④Roberts算子

function rob = roberts_margin(app,image) [m,n]=size(image); rob=zeros(m,n); for i=2:m-1 for j=2:n-1 rob(i,j)=abs(image(i+1,j+1)-image(i,j))+abs(image(i,j+1)-image(i+1,j)); end end end 3.滤波处理算法

①均值滤波

function [smooth] = average_filter(app,image) [m,n]=size(image); smooth=zeros(m,n); for i=2:m-1 for j=2:n-1 smooth(i,j) = image(i-1,j-1)+image(i-1,j)+image(i-1,j+1)+image(i,j-1)+image(i,j)+image(i,j+1)+image(i+1,j-1)+image(i+1,j)+image(i+1,j+1); smooth(i,j) = smooth(i,j)/9; end end end

②中值滤波

function [ x2 ] = median_filter(app,image, m ) n = m; [ height, width ] = size(image); x1 = double(image); x2 = x1; for i = 1: height-n+1 for j = 1:width-n+1 mb = x1( i:(i+n-1), j:(j+n-1) ); mb = mb(:); mm = median(mb); x2( i+(n-1)/2, j+(n-1)/2 ) = mm; end end end 4.图像二值化处理 function [binary_img] = binary(app,image,T) binary_img = im2uint8(image);% 将均值滤波后的图像转换为uint8类型图像,即图像色彩范围[0,255] [m,n]=size(binary_img); for i=1:m for j=1:n if binary_img(i,j)>T % 设置二值化的阈值 binary_img(i,j) = 255;% 超过阈值的设为白点 else binary_img(i,j) = 0;%小于阈值的设为黑点 end end end end 5.Hough变换检测 function [origin_img] = hough_tram(app,binary_img,origin_img,T) angle = 180; [m,n]=size(binary_img); distance = round(sqrt(m^2+n^2)); number_ap = zeros(angle,2*distance); coordinate = cell(angle,2*distance); for i = 1:m for j = 1:n if(binary_img(i,j) == 255) for k = 1:angle p = round(i*cos(pi*k/180)+j*sin(pi*k/180)); if(p > 0) number_ap(k,distance+p) = number_ap(k,distance+p)+1; coordinate{k,distance+p} = [coordinate{k,distance+p},[i,j]]; else ap = abs(p)+1; number_ap(k,ap) = number_ap(k,ap)+1; coordinate{k,ap} = [coordinate{k,ap},[i,j]]; end end end end end for i = 1:angle for j = 1:distance*2 if(number_ap(i,j)>T)%提取直线的阈值 point = coordinate{i,j};%提取对应点坐标 [m,n] = size(point); for k = 1:number_ap(i,j) origin_img(point(2*k-1),point(2*k),1) = 0; origin_img(point(2*k-1),point(2*k),2) = 255; origin_img(point(2*k-1),point(2*k),3) = 0; end end end end end 6.文件的保存 function reserve(app,image,sz) path = 'F:/matlab/work/hough transform/'; prefix = 'hough_'; format = 'jpg'; suffix = strcat('.',format); imwrite(image,strcat(path,prefix,num2str(sz),suffix)); msgbox('图像保存成功'); end 五、运行结果展示 1.主界面

在这里插入图片描述

2.边缘检测

在这里插入图片描述

3.噪声处理

在这里插入图片描述

4.二值化处理

在这里插入图片描述

5.边缘提取

在这里插入图片描述

6.效果对比

原图:(边缘不平整) 在这里插入图片描述 处理图: 在这里插入图片描述 原图:(边缘平整) 在这里插入图片描述 处理图: 在这里插入图片描述

六、分析与总结

  图像的Hough变换是一种图像特征提取的技术,通过投票法检测特定形状并提取,其方法是在参数空间中通过投票累加获得局部最大值,从而通过值得到符合特定形状的集合,该集合即为Hough变换结果。   在Hough变换中,主要是利用图像的特殊形状,按照指定的函数进行参数空间点的累加,每取到函数形状上的点则进行投票累加,最后通过参数限制获得需要统计的点并组成点的集合,此时即可得到最终的边界点。Hough变换多用于对直线、圆、椭圆形状的检测和提取。Hough变换算法适用于所有能够用方程表达出的图像特征,而其算法的复杂度也随着图像特征方程的复杂度变化。   根据检测结果可以总结出以下几点。   (一)Hough变换是通过函数拟合来完成边缘选择的,对于具有单一颜色、简单边缘以及已知函数的图像而言,Hough变换能够更好地选择边缘,例如上图的小车;   (二)Hough变换不适合用于复杂颜色、复杂边缘的图像,例如上图的房屋,这种图像都不适合进行函数拟合,Hough变换会使得最终的效果较差。

参考文献: 【1】CSDN博客 无限遐想计划 https://blog.csdn.net/qq_43571150/article/details/103544472 【2】数字图像处理(MATLAB版))第二版 冈萨雷斯



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3