2012-12-20 67 views
0

可能重複:
Is there a way to detect if an image is blurry?計算blurness和清晰度

如何計算給定的圖像USIG的OpenCV blurness和清晰度?在opencv中有沒有什麼功能可以做到這一點?如果opencv中沒有函數,我該如何實現它?不僅如此想法將是偉大的..

的投入將是一個圖像和輸出應該是圖像的blurness和清晰度。

+0

您的意思是模糊的圖像和銳化的圖像? – sgarizvi

+0

見:http://docs.opencv.org/modules/imgproc/doc/filtering.html 而且肯定可以實現例如你自己,你需要對圖像處理的一些背景,您可以使用卷積:HTTP: //beej.us/blog/data/convolution-image-processing/ – Maroun

+2

@MarounMaroun他希望以某種方式檢測和測量模糊,他沒有尋找應用模糊的方法。順便說一句,我看不出這個要求中的任何一點,我無法想象爲什麼這應該工作或有用。 – user1849534

回答

2

,我建議你,使圖像的frequential分析。高頻段的能量會告訴你圖像相當銳利,而低頻段的能量通常意味着圖像模糊。爲了計算頻譜,您可以使用FFTW庫。

Regards,

+0

感謝您的回覆。這個鏈接中有一個代碼片段http://stackoverflow.com/questions/7765810/is-there-a-way-to-detect-if-an-image-is-blurry一個名爲GetSharpness的函數。它會計算圖像的清晰度嗎?你對它的評論? – 2vision2

+0

是的!而已。這些卷積是圖像的銳度度量。另一個簡單的選擇是使用高斯濾波器或拉普拉斯算子模糊圖像,然後計算結果與原始圖像之間的差異。如果差異>> 0意味着原始圖像已經模糊!否則圖像被銳化。計算機視覺就是這樣......兩千種方法來做同樣的事情......好吧,根本不一樣:-) –

3

我不知道opencv。

如果我試圖獲得一個近似的測量結果,我想從觀察中可以看出圖像部分的清晰度可以從相鄰像素之間的對比中看出來 - 類似於max(c1 * abs(r1 - r2), c2 * abs(g1 - g2), c3 * abs(b1 - b2)),其中c1-3衡量每個紅色,綠色和藍色通道的感知重要性,並且兩個像素是(r1,g1,b1)和(r2,g2,b2))。

可能會進行許多調整,例如提高每種顏色對功率的貢獻,以強調亮度等級在暗處(功率爲< 1)或亮度(功率> 1)結束時的變化。請注意,max()方法分別考慮每個顏色通道的清晰度:儘管只有一個通道變化,但從說(255,255,255)到(0,255,255)的變化非常顯着。

你可能會發現,最好從RBG轉換成另一種顏色表示,如色相/飽和度/值(還會有很多網站的在線說明HSV空間和公式進行轉換)。

照片上,我們通常有興趣知道圖像的焦點部分很清晰(由於景深較淺,前景/背景模糊/背景虛化是一種正常且常常令人滿意的質量) - 最清晰的指示即圖像的某些部分具有高對比度,這表明您需要相鄰像素對比度的最大值。也就是說,一些聚焦的像素仍然可以具有非常低的局部對比度(例如,固體彩色表面的圖像)。此外,傳感器上的損壞像素元件,鏡頭/傳感器上的污垢以及高ISO /長時間曝光噪聲都可能表現爲極高對比度的斑點。所以你的結果的有效性總會有問題,但它可能是一個有用的比例。