資源簡介
使用opencv實現Forstner點特征提取過程:
計算某一窗口內各個像元的Robert’s梯度
計算一定窗口中灰度的協方差矩陣
計算興趣值q與w
確定待選點
選取候選點中的極值點作為特征點(抑制局部非最大)
代碼片段和文件信息
#include???
#include?
#include?
#include
#include?
using?namespace?std;
using?namespace?cv;
int?main()
{
int?threshval?=?170;//設定閾值為170
Mat?pic_orig?=?cv::imread(“Image.png“?-1);
Mat?pic_gray?=?cv::imread(“Image.png“?0);
Mat?pic_bw;
int?nrows?=?pic_orig.rows;
int?ncols?=?pic_orig.cols;
Mat?result?=?Mat::zeros(nrows?ncols?pic_bw.type());
int?dg[4]?=?{?0?};
cv::imshow(“原始標準圖像“?pic_orig);
cv::imshow(“灰度圖像“?pic_gray);
threshold(pic_gray?pic_bw?threshval?255?CV_THRESH_BINARY);
cv::imshow(“二值化圖像“?pic_bw);
for?(int?i?=?2;?i? {
for?(int?j?=?2;?j? {
dg[0]?=?abs(pic_bw.at(i?j)?-?pic_bw.at(i+1?j));
dg[1]?=?abs(pic_bw.at(i?j)?-?pic_bw.at(i?j+1));
dg[2]?=?abs(pic_bw.at(i?j)?-?pic_bw.at(i-1?j));
dg[3]?=?abs(pic_bw.at(i?j)?-?pic_bw.at(i?j-1));
sort(dg?dg?+?4?greater());??//降序:sort(beginendgreater()).
if?(dg[2]>=1)
{
result.at(i?j)?=?255;
}
else{
result.at(i?j)?=?0;
}
}
}
cv::imshow(“初選點“?result);
cv::Mat?wMatrix?=?cv::Mat::zeros(nrows?ncols?CV_64FC1);
double?gu2?gv2?guv;
double?Tq?=?0.8DetN?=?0.0?trN?=?0.0?q?=?0.0;
for?(int?i?=?2;?i? {
for?(int?j?=?2;?j? {
if?(result.at(i?j)?==?255)
{
gu2?=?0.0;
gv2?=?0.0;
guv?=?0.0;
for?(int?a?=?i?
- 上一篇:C 語言編譯器源碼
- 下一篇:c語言int char類型轉換
評論
共有 條評論