数字图像处理课程设计Hough变换检测房屋车道等边缘特征

本文主要是介绍数字图像处理课程设计Hough变换检测房屋车道等边缘特征,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要

霍夫变换是一个特征提取技术。其可用于隔离图像中特定形状的特征的技术,应用在图像分析、计算机视觉和数字图像处理领域。目的是通过投票程序在特定类型的形状内找到对象的不完美实例。这个投票程序是在一个参数空间中进行的,在这个参数空间中,候选对象被当作所谓的累加器空间中的局部最大值来获得,所述累加器空间由用于计算霍夫变换的算法明确地构建。最基本的霍夫变换是从黑白图像中检测直线(线段)。Hough变换主要优点是能容忍特征边界描述中的间隙,并且相对不受图像噪声的影响。因此本实验我将利用Hough变换检测,计算获得矢量化的房屋边缘特征。

总体设计

本实验通过图形界面的方式展示了Hough变换的应用,界面友好,方便使用。其中界面上分别设有五个按钮,以便提供用户交互体验。五个按钮分别是读取图像按钮,Prewitt边缘检测按钮,Hough变换按钮,Hough变换检测特征按钮以及退出按钮。用户通过分别点击各个按钮完成整个流程,极大的方便了用户的使用。其次每点击一个按钮就会显示相应功能处理后的图像,给了用户很好的使用体验感。其主要总结起来就是读入图片,对其进行灰度变换,然后高斯滤波平滑处理,对其进行Hough变换,最后进行Hough变换直线检测。

技术原理

霍夫变换最简单的是检测直线。我们知道,直线的方程表示可以由斜率和截距表示(这种表示方法,称为斜截式),如下所示:
y = k x + b y = kx+b y=kx+b
如果用参数空间表示则为(b,k),即用斜率和截距就能表示一条直线。对于任意两点的直线方程:y = Kx + b,构造一个参数K,b的平面。

1、xy平面上的任意一条直线y = ax + b ,对应在参数ab平面上是一个点;

2、过xy平面一个点(x,y)的所有直线,构成参数ab平面上的一条直线。
在这里插入图片描述
但是这样会参数问题,垂直线的斜率不存在,这使得斜率参数K的值接近于无限。为此,为了更好的计算,1971年4月,提出了Hesse normal form(Hesse法线式)。
r = x c o s θ + y s i n θ r=xcosθ+ysinθ r=xcosθ+ysinθ
其中r是原点到直线上最近点的距离(其他人可能把这记录为ρ,下面也可以把r看成参数ρ),θ是x轴与连接原点和最近点直线之间的夹角。如下图所示。
在这里插入图片描述
因此,可以将图像的每一条直线与一对参数(r,θ)相关联。这个参数(r,θ)平面有时被称为霍夫空间,用于二维直线的集合。

在这里插入图片描述
Hough变换线检测的流程

首先适当地离散化参数空间。然后为参数空间的每一个单元设置一个累加器,把累加器初始化为零。其次对图像空间的每一点,在其所满足的参数方 程对应的累加器上加1。最后累加器阵列的最大值对应模型的参数。

代码实现

  1. 读取原始图并转换成灰度图,采用边缘检测算子(如Canny)转换成二值化边缘图像。
  2. 然后对该图像进行霍夫变换。
  3. 先使用峰值检测函数,找到大于阈值的霍夫变换单元(局部最大值应该最可能是线,步长和量化会影响效果。
  4. 将上述识别出的一组候选峰,需要确定与其相关的线段及其起始点和终止点(这需要一定的算法,很多论文对此都做了改进,诸如蝴蝶形状宽度,峰值走廊)。
  5. 然后描绘于原图(或结果图)。
  6. 结果测试与分析(以下是部分代码,项目代码文件打包下载请到我的个人主页查找)

function varargout = GUI(varargin)
% GUI MATLAB code for GUI.fig
%      GUI, by itself, creates a new GUI or raises the existing
%      singleton*.
%
%      H = GUI returns the handle to a new GUI or the handle to
%      the existing singleton*.
%
%      GUI('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in GUI.M with the given input arguments.
%
%      GUI('Property','Value',...) creates a new GUI or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before GUI_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to GUI_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help GUI% Last Modified by GUIDE v2.5 10-Jan-2022 21:51:26% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @GUI_OpeningFcn, ...'gui_OutputFcn',  @GUI_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before GUI is made visible.
function GUI_OpeningFcn(hObject, ~, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to GUI (see VARARGIN)% Choose default command line output for GUI
handles.output = hObject;
handles.cd0 = cd;
handles.Color = 0;
handles.I = [];axes(handles.axes1);
set(gca,'Xtick',[]);%去除x轴的刻度
set(gca,'Ytick',[]);%去除y轴的刻度
box on;axes(handles.axes2);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;axes(handles.axes3);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;axes(handles.axes4);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;% Update handles structure
guidata(hObject, handles);% UIWAIT makes GUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = GUI_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;%执行按钮按下读取图片按钮。
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)%%  读图
[filename, cd1] = uigetfile( ...{'*.tif;*.TIF;*.JPG;*.jpg;*.png;*.bmp;*.BMP;*.jpeg;*.JPEG;','Image file';...'*.*', 'All file (*.*)'},'Pick an Image');
axes(handles.axes1);
cla;%清除坐标系,相当于初始化axes
axes(handles.axes2);
cla;
axes(handles.axes3);
cla;
axes(handles.axes4);
cla;
if filenamecd(cd1);%目录d = imread(filename);%获取图片数据cd(handles.cd0);handles.I = d;axes(handles.axes1);%创建坐标系imshow(d);%显示图title('原始图像');handles.filename = filename; box on;%显示右边和上边框end
cd(handles.cd0);
guidata(hObject, handles);//这只是部分代码,完整代码请进入个人主页查看

运行结果测试

1.首先点击运行跳出如下界面。
在这里插入图片描述
2.然后点击读取图像按钮将会跳出一个选择图像的窗口,然后就可以选择图像了,如下图所示。在这里插入图片描述
3.读入图像如下所示,得到第一幅 读入的图像,如下图所示。
在这里插入图片描述
4.点击第二个按钮 Prewitt边缘检测按钮对图像进行边缘检测,得到边缘检测后的图像,如下所示。
在这里插入图片描述
5.点击第三个按钮Hough变换按钮对图像就行Houhg变换,得到第三幅Hough变换图,如下所示。
在这里插入图片描述
6.点击第四个按钮对图像进行Hough变换特征检测,得到最后一幅Hough变换直线特征检测图,最后点击退出按钮退出程序,如下。
在这里插入图片描述

总结与展望

霍夫变换的大部分效率取决于输入数据的质量:为了使霍夫变换高效,必须检测边缘。在噪声图像上使用Hough变换是一个非常棘手的问题,一般而言,之前必须使用降噪阶段。在图像被斑点破坏的情况下(如雷达图像中的情况),Radon变换有时更适合检测线,因为它通过求和来衰减噪声。一开始实验中的图形界面设计与功能无法更好的结合起来,为此耗费了不少精力,查阅了不少资料,各种百度,B站进行学习,最终才可以完成界面交互。其次也让我了解到了不动手实践,等到真正动手实践才发现理论与实践的差距。同时通过此次课设也让我收获良多。本实验采用的开发工具是MATLAB2014b中文破解版。

这篇关于数字图像处理课程设计Hough变换检测房屋车道等边缘特征的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/444325

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测

关于饰品类产品合规问题宣导: 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规,其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性,欧盟REACH法规规定,珠宝首饰上架各大电商平台前必须进行RSLReport(欧盟禁限用化学物质检测报告)资质认证,以确保产品不含对人体有害的化学物质。 RSL-铅,

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P98

更改为 差分的数学表达式从泰勒级数展开式可得: 后悔没听廖老师的。 禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码