【图像检测】基于直方图实现火灾检测matlab代码
【图像检测】基于直方图实现火灾检测matlab代码
TT_Matlab
每天分享一点Matlab资料,一起成长进步。需要定制程序添加qq1575304183
1 简介
直方图是表达一副图像灰度级分布情况的关于统计信息的灰度级函数。它反映了灰 度级与出现这种灰度的概率间的对应关系,其横坐标是灰度级,纵坐标是该灰度级出现 的频度。对于高对比度图像的直方图,其灰度级的分布范围宽且较均匀,而对比度低的 图像,其直方图分布区间窄且集中于灰度级的某一部分,因此直方图可以表征图像的一 些重要特征信息。直方图均衡化处理是空域处理技术的基础。它是通过灰度值的累积函 数把原图像的直方图变成均匀分布的直方图,即把相对集中的灰度级分布进行扩展,通 过增加像素灰度级分布的动态范围,使对比度得到增加 [76] ,达到增强图像整体对比度的 效果。a
2 部分代码
clear all ; close all ; clc ; img = double ( imread ( ’flame2.jpg’ )); imshow ( img ,[]); [ m n ]= size ( img ); img = sqrt ( img ); %伽马校正 % HOG特征提取 %下面是求边缘 fy =[ -1 0 1 ]; %定义竖直模板 fx = fy ’ ; %定义水平模板 Iy = imfilter ( img , fy , ’replicate’ ); %竖直边缘 Ix = imfilter ( img , fx , ’replicate’ ); %水平边缘 Ied = sqrt ( Ix .^ 2 + Iy .^ 2 ); %边缘强度 Iphase = Iy ./ Ix ; %边缘斜率,有些为inf,-inf,nan,其中nan需要再处理一下 %下面是求cell step = 16 ; %step*step个像素作为一个单元 orient = 9 ; %方向直方图的方向个数 jiao = 360 / orient ; %每个方向包含的角度数 Cell = cell ( 1 , 1 ); %所有的角度直方图,cell是可以动态增加的,所以先设了一个 ii = 1 ; jj = 1 ; for i = 1 : step : m %如果处理的m/step不是整数,最好是i=1:step:m-step ii = 1 ; for j = 1 : step : n %注释同上 tmpx = Ix ( i : i + step -1 , j : j + step -1 ); tmped = Ied ( i : i + step -1 , j : j + step -1 ); tmped = tmped / sum ( sum ( tmped )); %局部边缘强度归一化 tmpphase = Iphase ( i : i + step -1 , j : j + step -1 ); Hist = zeros ( 1 , orient ); %当前step*step像素块统计角度直方图,就是cell for p = 1 : step for q = 1 : step if isnan ( tmpphase ( p , q )) == 1 %0/0会得到nan,如果像素是nan,重设为0 tmpphase ( p , q )= 0 ; end ang = atan ( tmpphase ( p , q )); %atan求的是[-90 90]度之间 ang = mod ( ang * 180 / pi , 360 ); %全部变正,-90变270 if tmpx ( p , q ) < 0 %根据x方向确定真正的角度 if ang < 90 %如果是第一象限 ang = ang +180 ; %移到第三象限 end if ang > 270 %如果是第四象限 ang = ang -180 ; %移到第二象限 end end ang = ang +0.0000001 ; %防止ang为0 Hist ( ceil ( ang / jiao ))= Hist ( ceil ( ang / jiao )) + tmped ( p , q ); %ceil向上取整,使用边缘强度加权 end end Hist = Hist / sum ( Hist ); %方向直方图归一化 Cell { ii , jj }= Hist ; %放入Cell中 ii = ii +1 ; %针对Cell的y坐标循环变量 end jj = jj +1 ; %针对Cell的x坐标循环变量 end %下面是求feature,2*2个cell合成一个block,没有显式的求block [ m n ]= size ( Cell ); feature = cell ( 1 ,( m -1 ) * ( n -1 )); for i = 1 : m -1 for j = 1 : n -1 f =[]; f =[ f Cell { i , j }(:) ’ Cell { i , j +1 }(:) ’ Cell { i +1 , j }(:) ’ Cell { i +1 , j +1 }(:) ’ ]; feature {( i -1 ) * ( n -1 ) + j }= f ; end end %到此结束,feature即为所求 %下面是为了显示而写的 l = length ( feature ); f =[]; for i = 1 : l f =[ f ; feature { i }(:) ’ ]; end figure mesh ( f )
3 仿真结果
4 参考文献
[1]赵丽娜, 徐常志, 叶俊健, 陈晓波, & 邓伟锋. (2020). 基于matlab的火灾视频探测技术. 工业技术创新, 7(3), 4.
微信扫一扫赞赏作者
赞赏
发送给作者
人赞赏
长按二维码向我转账
受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。
-
Origin(Pro):学习版的窗口限制【数据绘图】 2020-08-07
-
如何卸载Aspen Plus并再重新安装,这篇文章告诉你! 2020-05-29
-
AutoCAD 保存时出现错误:“此图形中的一个或多个对象无法保存为指定格式”怎么办? 2020-08-03
-
OriginPro:学习版申请及过期激活方法【数据绘图】 2020-08-06
-
CAD视口的边框线看不到也选不中是怎么回事,怎么解决? 2020-06-04
-
教程 | Origin从DSC计算焓和比热容 2020-08-31
-
如何评价拟合效果-Origin(Pro)数据拟合系列教程【数据绘图】 2020-08-06
-
Aspen Plus安装过程中RMS License证书安装失败的解决方法,亲测有效! 2021-10-15
-
CAD外部参照无法绑定怎么办? 2020-06-03
-
CAD中如何将布局连带视口中的内容复制到另一张图中? 2020-07-03