紙盒表面可能存在髒汙煙渣等,如果超過一定面積,需檢測為不良品。
檢測如紅框所示的異常點,異常原因傳送帶髒汙,有煙渣覆蓋在菸盒表面。
如下所示的成像, 上部是二次求導, 下部是影象的灰度值。
log運算元即高斯拉普拉斯, 先進行laplace再與影象進行平滑處理。
dog運算元即高斯查分
。
log曲線其實是兩條邊界上產生的log函式的疊加,當兩條邊界足夠小時,在該尺度脈衝下就被作為了blob,這時候log曲線的極值就對應著blob的中心。著尺度的不斷增大,log曲線由雙波谷逐漸融合成單波谷,但是響應的幅值越來越弱,因為隨著尺度的增加, log運算元的最大幅度逐漸的減少,穩定的訊號,相應的幅度與方差成正比,可以消除尺度的影響。
使用log運算元進行blob檢測時,首先在不同尺寸上對影象進行log,然後檢測在尺度空間和影象空間都是極值的點,就是blob區域的中心點。
a: 首先使用不同尺度的高斯運算元對影象進行平滑
b: 其次計算相鄰尺度下平滑影象的差分影象(dog空間)
c: 最後在dog空間尋找極值點
// 參考
mat create_log(int size, double sigma)
}double mean = sum/(size*size);
for(int i = 0; i < h.rows; i++)
}return h;
}
如下所示, 進行不同引數的除錯, 無法有效的檢測。
構建不同方向的濾波, 強化灰度發生變化的位置。
//1. 單通道的grayimg
cv::mat grayimg;
getgrayimg(srcimg, grayimg);
//2. 在順45方向的filter2d
cv::mat filtertlimg;
cv::filter2d(grayimg, filtertlimg, grayimg.depth(), kerneltl);
cv::convertscaleabs(filtertlimg, filtertlimg);
//3. 在逆45方向的filter2d
cv::mat filtertrimg;
cv::filter2d(grayimg, filtertrimg, grayimg.depth(), kerneltr);
cv::convertscaleabs(filtertrimg, filtertrimg);
//4. 在順45方向的filter2d
cv::mat filterblimg;
cv::filter2d(grayimg, filterblimg, grayimg.depth(), kernelbl);
cv::convertscaleabs(filterblimg, filterblimg);
//5. 在逆45方向的filter2d
cv::mat filterbrimg;
cv::filter2d(grayimg, filterbrimg, grayimg.depth(), kernelbr);
cv::convertscaleabs(filterbrimg, filterbrimg);
//6. 各個方向銳化的相加
/*roi的 highlight 的引數*/
message hightlightnparea
構建不同方向的濾波, 銳化灰度變化區域。如果有底紋, 需要進行底紋背景的弱化 CSS中的形狀斑點
我們僅介紹了svg中的形狀變形 其中形狀從一種變為另一種。讓我們看一下彼此斑點的形狀!你知道,粘糊糊的浮腫效果就像表面上的汞滴一樣。我不確定是誰首先在網上發現了這一點,但是我見過的第一處是lucas bebber的演示 請參閱codepen上的lucas bebber lbebber 撰寫的pen ...
燈亮的個數
一條長廊裡依次裝有n 1 n 65535 盞電燈,從頭到尾編號1 2 3 n 1 n。每盞電燈由乙個拉線開關控制。開始,電燈全部關著。有n個學生從長廊穿過。第乙個學生把號碼凡是1的倍數的電燈的開關拉一下 接著第二個學生把號碼凡是2的倍數的電燈的開關拉一下 接著第三個學生把號碼凡是3的倍數的電燈的開關...
計算亮燈的個數
描述 一條長廊裡依次裝有n 1 n 65535 盞電燈,從頭到尾編號1 2 3 n 1 n。每盞電燈由乙個拉線開關控制。開始,電燈全部關著。有n個學生從長廊穿過。第乙個學生把號碼凡是1的倍數的電燈的開關拉一下 接著第二個學生把號碼凡是2的倍數的電燈的開關拉一下 接著第三個學生把號碼凡是3的倍數的電燈...