怎么做自动下单网站,网站开发学什么比较有优势,江苏城嘉建设工程有限公司网站,云服务器网站文件夹风机桨叶故障诊断#xff08;二#xff09; 获取图像几何主方向 昨天#xff0c;我将视频资源按帧抽取并筛选得到了可以用来提取样本的图像库。今天还是进行项目的准备工作。当我们拿到一张图片#xff0c;我们的软件要做的大致可以分为三个步骤#xff1a;从原图中识别桨…风机桨叶故障诊断二 获取图像几何主方向 昨天我将视频资源按帧抽取并筛选得到了可以用来提取样本的图像库。今天还是进行项目的准备工作。当我们拿到一张图片我们的软件要做的大致可以分为三个步骤从原图中识别桨叶——从桨叶中寻找故障——诊断故障类型。 我们第一步要识别的核心物体是桨叶首先桨叶的运动是有其特点的它绕着一个轴在旋转所以我们得到的图像中桨叶的方向是360°任意的。就如下图所示 我考虑到由于样本数量并不庞大且多样设计一个算法识别出一个物体是否为桨叶且提供的桨叶图像方向任意的方案并不理想。我感觉如果我们对于任意的桨叶图像能够识别出桨叶所指的方向然后将其统一旋转到水平方向来归一化样本应该是个不错的选择 现在的问题就是如何将图像中物体的几何主方向提取出来。 首先我们想提取桨叶的几何轮廓信息而要排除背景等因素的干扰。考虑使用边缘提取算法。下面我们均以下图所示桨叶为例展示算法的结果 下图是采用不同算子进行边缘提取后的结果 注上图所示结果在边缘提取前进行了高斯滤波我在试验了批量样本后发现在边缘提取前进行滤波是必要的可以排除背景中包括云层等因素的影响。下面是某个桨叶图像直接提取的结果未滤波 进行了大量的探索之后我们发现 1.在边缘提取前有必要进行滤波我使用的是高斯滤波 2.边缘提取时sobel算子和roberts算子表现比较好所以后面的边缘提取我将采用sobel算子我再赘述。 到这里我们得到了桨叶的几何轮廓信息就像下图所示怎么从中得到桨叶的方向呢 我们可以看到桨叶的几何轮廓非常具有特点大致由两条角度近似的直线相交在一起。可以看出这样的轮廓其具有明显的像素值的梯度方向也就是与两条角度近似直线方向的垂直方向。换个角度想某个角度的梯度大小与频率域的某个方向的总能量大小时对应的。所以我们可以用二维傅里叶变换将图像变换到频率域用结果求出对应的能量谱将频率域沿原点上半平面分180份因为下半平面与上半平面的角度是一一对应的所以只考虑上半平面就可以了分别计算每一份小扇形所包含的区域内的能量总和也就代表着这个角度上所包含的能量大小。 上图边缘提取结果再进行二维傅里叶变换后的能量谱如下图所示图像中心对应于0频率可以明显看出能量主要集中在水平方向。 我们取180个角度中能量最大的那个作为我们的主方向输出即可完成算法。算法输出的主方向角度和对应的桨叶图像示例如下 41° 1° 135° 由上面的结果可以看出对于识别桨叶所指角度的问题这个方法十分有效且可靠。这样我们拿到一个桨叶图像后即可调用算法识别主方向然后将其旋转到水平方向这样我们的样本就得到了归一化相信之后的预测算法能够表现的更好。 不过我们还可以注意到一个问题算法对于负角度的桨叶输出结果是与之对应的正角度在后面的工作中应该要再用一个方法区分一下正反。 识别图像中物体主方向算法的matlab实现如下 function [mdex] MainDirec(a)
%根据图像边缘信息估计纹理主方向%若是彩色图像将其变换为灰度图像
if(size(a,3)~1)argb2gray(a);
end%使用sobel算子进行边缘提取
[w,h]size(a);
edge_aedge(a,sobel);%注fft2是2维离散傅立叶变换
% 傅里叶变换后如果使用fftshift命令0频率分量将会移到坐标中心
fedge_afftshift(fft2(edge_a));%求傅里叶变换的实部、虚部
realfreal(fedge_a);
imagfimag(fedge_a);
%求傅里叶变换的能量
pfasqrt(realf.^2imagf.^2);
%绘制出能量谱看下
imshow(pfa);%dhist用来记录每个角度上的能量
dhistzeros(1,180);%0频率分量出的坐标坐标中心
x0w/2; y0h/2;for i1:wfor j1:h% 函数 theatatan2(imagf,realf); 将 theat 归一化到 [0,pi]tempatan2(j-y0,i-x0);if(temp0)temptemppi;end%round 向最近的整数取整%mod(a,b)就是求的是a除以b的余数%下面的一行代码将[0,pi]的角度换回[0,179],这样temp1的范围就是[1,180]tempmod(round(temp*180/pi),180);%dhist用来记录每个角度上的能量%将当前位置的能量累加到记录当前位置所属角度的能量的变量dhist中dhist(temp1)dhist(temp1)pfa(i,j);end
end% %将精确的能量谱简化成分段的形式
% dsp[0:10:170;10:10:180];
% histzeros(1,18);
% for i1:180
% for k1:18
% if(idsp(1,k) idsp(2,k))
% hist(k)hist(k)dhist(i);
% end
% end
% end
% [mhist,mdex]max(hist);[mhist,mdex]max(dhist);end