风机桨叶故障诊断(二) 获取图像几何主方向
風(fēng)機槳葉故障診斷(二) 獲取圖像幾何主方向
? ? 昨天,我將視頻資源按幀抽取并篩選得到了可以用來提取樣本的圖像庫。今天還是進行項目的準(zhǔn)備工作。當(dāng)我們拿到一張圖片,我們的軟件要做的大致可以分為三個步驟:從原圖中識別槳葉——從槳葉中尋找故障——診斷故障類型。
? ? 我們第一步要識別的核心物體是槳葉,首先槳葉的運動是有其特點的,它繞著一個軸在旋轉(zhuǎn),所以我們得到的圖像中槳葉的方向是360°任意的。就如下圖所示:
? ??? ??? ??
? ? 我考慮到由于樣本數(shù)量并不龐大且多樣,設(shè)計一個算法識別出一個物體是否為槳葉(且提供的槳葉圖像方向任意)的方案并不理想。我感覺如果我們對于任意的槳葉圖像,能夠識別出槳葉所指的方向,然后將其統(tǒng)一旋轉(zhuǎn)到水平方向來歸一化樣本,應(yīng)該是個不錯的選擇!
? ? 現(xiàn)在的問題就是,如何將圖像中物體的幾何主方向提取出來。
? ? 首先我們想提取槳葉的幾何輪廓信息,而要排除背景等因素的干擾。考慮使用邊緣提取算法。下面我們均以下圖所示槳葉為例,展示算法的結(jié)果
? ? ? ??
? ? 下圖是采用不同算子進行邊緣提取后的結(jié)果
? ??
? ? 注:上圖所示結(jié)果在邊緣提取前進行了高斯濾波,我在試驗了批量樣本后發(fā)現(xiàn)在邊緣提取前進行濾波是必要的,可以排除背景中包括云層等因素的影響。下面是某個槳葉圖像直接提取的結(jié)果(未濾波)
? ??
? ? 進行了大量的探索之后我們發(fā)現(xiàn):
? ? 1.在邊緣提取前有必要進行濾波,我使用的是高斯濾波
? ? 2.邊緣提取時sobel算子和roberts算子表現(xiàn)比較好,所以后面的邊緣提取我將采用sobel算子,我再贅述。
? ? 到這里,我們得到了槳葉的幾何輪廓信息,就像下圖所示,怎么從中得到槳葉的方向呢?
? ? ?
? ? ?我們可以看到槳葉的幾何輪廓非常具有特點,大致由兩條角度近似的直線相交在一起。可以看出,這樣的輪廓,其具有明顯的像素值的梯度方向,也就是與兩條角度近似直線方向的垂直方向。換個角度想,某個角度的梯度大小與頻率域的某個方向的總能量大小時對應(yīng)的。所以我們可以用二維傅里葉變換將圖像變換到頻率域,用結(jié)果求出對應(yīng)的能量譜,將頻率域沿原點上半平面分180份(因為下半平面與上半平面的角度是一一對應(yīng)的,所以只考慮上半平面就可以了),分別計算每一份小扇形所包含的區(qū)域內(nèi)的能量總和,也就代表著這個角度上所包含的能量大小。
? ? ?上圖邊緣提取結(jié)果再進行二維傅里葉變換后的能量譜如下圖所示(圖像中心對應(yīng)于0頻率),可以明顯看出能量主要集中在水平方向。
? ? ?
? ? ?我們?nèi)?80個角度中能量最大的那個作為我們的主方向輸出,即可完成算法。算法輸出的主方向角度和對應(yīng)的槳葉圖像示例如下:
? ??? ? ? ? ? ?41°
? ??? ? ? ? ? ? ? ? ?1°
? ??? ? ? ? ? ? ? ? ? ? ?135°
? ? 由上面的結(jié)果可以看出,對于識別槳葉所指角度的問題,這個方法十分有效且可靠。這樣,我們拿到一個槳葉圖像后,即可調(diào)用算法識別主方向,然后將其旋轉(zhuǎn)到水平方向,這樣我們的樣本就得到了歸一化,相信之后的預(yù)測算法能夠表現(xiàn)的更好。
? ? 不過我們還可以注意到一個問題,算法對于負角度的槳葉輸出結(jié)果是與之對應(yīng)的正角度,在后面的工作中,應(yīng)該要再用一個方法區(qū)分一下正反。
? ? ?識別圖像中物體主方向算法的matlab實現(xiàn)如下:
function [mdex] = MainDirec(a) %根據(jù)圖像邊緣信息估計紋理主方向%若是彩色圖像,將其變換為灰度圖像 if(size(a,3)~=1)a=rgb2gray(a); end%使用sobel算子進行邊緣提取 [w,h]=size(a); edge_a=edge(a,'sobel');%注:fft2是2維離散傅立葉變換 % 傅里葉變換后,如果使用fftshift命令,0頻率分量將會移到坐標(biāo)中心 fedge_a=fftshift(fft2(edge_a));%求傅里葉變換的實部、虛部 realf=real(fedge_a); imagf=imag(fedge_a); %求傅里葉變換的能量 pfa=sqrt(realf.^2+imagf.^2); %繪制出能量譜看下 imshow(pfa);%dhist用來記錄每個角度上的能量 dhist=zeros(1,180);%0頻率分量出的坐標(biāo)(坐標(biāo)中心) x0=w/2; y0=h/2;for i=1:wfor j=1:h% 函數(shù) theat=atan2(imagf,realf); 將 theat 歸一化到 [0,pi]temp=atan2(j-y0,i-x0);if(temp<0)temp=temp+pi;end%round 向最近的整數(shù)取整%mod(a,b)就是求的是a除以b的余數(shù)%下面的一行代碼將[0,pi]的角度換回[0,179],這樣temp+1的范圍就是[1,180]temp=mod(round(temp*180/pi),180);%dhist用來記錄每個角度上的能量%將當(dāng)前位置的能量累加到記錄當(dāng)前位置所屬角度的能量的變量dhist中dhist(temp+1)=dhist(temp+1)+pfa(i,j);end end% %將精確的能量譜簡化成分段的形式 % dsp=[0:10:170;10:10:180]; % hist=zeros(1,18); % for i=1:180 % for k=1:18 % if(i>dsp(1,k) && i<=dsp(2,k)) % hist(k)=hist(k)+dhist(i); % end % end % end % [mhist,mdex]=max(hist);[mhist,mdex]=max(dhist);end
總結(jié)
以上是生活随笔為你收集整理的风机桨叶故障诊断(二) 获取图像几何主方向的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Modbus协议栈开发笔记之二:Modb
- 下一篇: arm32和arm64常用指令B BL