簡體   English   中英

Opencv C ++中的Harris Corner Detector中的規范化?

[英]Normalization in Harris Corner Detector in Opencv C++?

我正在閱讀有關使用Harris角檢測器在圖像中找到角的文檔。 我不明白他們為什么在應用Harris Corner函數后將圖像標准化。 我對規范化的概念有些困惑。 有人可以向我解釋為什么我們要對圖像進行歸一化嗎? 另外,convertscaleabs()的作用是什么。 我仍然是opencv的入門者,因此很難從文檔中了解它。

cornerHarris( src_gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT );

  /// Normalizing
  normalize( dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat() ); //(I couldnot understand this line)
  convertScaleAbs( dst_norm, dst_norm_scaled ); // ???

謝謝

我建議您在進入OpenCV之前先熟悉圖像處理基礎知識。 對比度,二值化,裁剪,閾值,切片,直方圖等基本概念有扎實的概念(僅舉幾例),將使您通過OpenCV的旅程更加輕松。

也就是說,Wikipedia的定義如下:“規范化是更改像素強度值范圍的過程……規范化有時稱為對比度拉伸或直方圖拉伸”。

為了說明這個定義,我將嘗試給你一個簡單的例子:

假設您有一個8位灰度圖像,可能的像素強度值從0到255。如果圖像具有“低對比度”,則其直方圖將在一定值附近顯示像素濃度,如下圖所示:

直方圖

現在,歸一化的作用是“獲取”此直方圖並將其拉伸 它應用強度轉換貼圖,該貼圖將原始的最小和最大強度值與整個強度范圍(0到255)內的一對新的最小和最大值相關。

至於convertScaleAbs() ,文檔說它可以縮放,計算絕對值,並將結果轉換為8位 沒有更多關於它的說法。

完整的原型為void convertScaleAbs(InputArray src, OutputArray dst, double alpha=1, double beta=0) ,因此使用該方法只是將計算矩陣中每個元素的絕對值並將其轉換為有效的8位無符號值。

您可能正在看OpenCV教程的代碼。

通過歸一化間隔[0,255]中的轉角響應(在某個未知間隔中)

normalize( dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat() );

選擇一個閾值比較容易(因為您現在知道閾值也將在[0,255]區間內)以僅保留最強的響應。 例如,在這種情況下,通過滑塊可以獲取閾值時,范圍[0,255]很有用,該滑塊只能具有整數值。

convertScaleAbs(dst_norm, dst_norm_scaled);

只需要轉換dst_normMat類型的CV_8U ,所以它可以正確地顯示imshow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM