2010-03-13 20 views
8

मैं एक छवि में शोर का आकलन करना चाहता हूं।छवि में शोर अनुमान/शोर माप

आइए छवि + व्हाइट शोर के मॉडल को मान लें। अब मैं शोर भिन्नता का आकलन करना चाहता हूं।

मेरी विधि छवि के स्थानीय भिन्नता (3 * 3 तक 21 * 21 ब्लॉक) की गणना करना है और फिर उन क्षेत्रों को ढूंढें जहां स्थानीय भिन्नता काफी स्थिर है (स्थानीय भिन्नता मैट्रिक्स के स्थानीय भिन्नता की गणना करके)। मुझे लगता है कि वे क्षेत्र "फ्लैट" हैं इसलिए भिन्नता लगभग "शुद्ध" शोर है।

फिर भी मुझे निरंतर परिणाम नहीं मिलते हैं।

क्या कोई बेहतर तरीका है?

धन्यवाद।

पीएस मैं छवि के बारे में कुछ भी नहीं मान सकता लेकिन स्वतंत्र शोर (जो असली छवि के लिए सच नहीं है फिर भी इसे मान लें)।

उत्तर

3

शोर से कैरेक्टरिंग सिग्नल की समस्या आसान नहीं है। आपके प्रश्न से, दूसरा ऑर्डर आंकड़ों को दर्शाने का पहला प्रयास होगा: प्राकृतिक छवियों को पिक्सेल को पिक्सेल सहसंबंधों के रूप में जाना जाता है जो कि परिभाषा हैं- सफेद शोर में मौजूद नहीं हैं।

फूरियर स्पेस में सहसंबंध ऊर्जा स्पेक्ट्रम से मेल खाता है। यह ज्ञात है कि प्राकृतिक छवियों के लिए, यह 1/f^2 के रूप में घटता है। शोर को मापने के लिए, इसलिए मैं आपकी छवि के स्पेक्ट्रम के सहसंबंध गुणांक की गणना दोनों हाइपोटिस (फ्लैट और 1/एफ^2) के साथ करने की अनुशंसा करता हूं, ताकि आप गुणांक निकाल सकें।

कुछ कार्य आप को शुरू करने के लिए:

import numpy 
def get_grids(N_X, N_Y): 
    from numpy import mgrid 
    return mgrid[-1:1:1j*N_X, -1:1:1j*N_Y] 

def frequency_radius(fx, fy): 
    R2 = fx**2 + fy**2 
    (N_X, N_Y) = fx.shape 
    R2[N_X/2, N_Y/2]= numpy.inf 

    return numpy.sqrt(R2) 

def enveloppe_color(fx, fy, alpha=1.0): 
    # 0.0, 0.5, 1.0, 2.0 are resp. white, pink, red, brown noise 
    # (see http://en.wikipedia.org/wiki/1/f_noise) 
    # enveloppe 
    return 1./frequency_radius(fx, fy)**alpha # 

import scipy 
image = scipy.lena() 
N_X, N_Y = image.shape 
fx, fy = get_grids(N_X, N_Y) 
pink_spectrum = enveloppe_color(fx, fy) 

from scipy.fftpack import fft2 
power_spectrum = numpy.abs(fft2(image))**2 

मैं अधिक जानकारी के लिए this wonderful paper सलाह देते हैं।

+0

बातें स्पष्ट करने के लिए, मान लीजिए कि मैं एक छवि मैट्रिक्स करते हैं - मैं मैटलैब वाक्य रचना में मैं लिखना होगा: NoisyImage = मैं + 5 * randn (आकार (आई)); अब, मैं शोर के भिन्नता का आकलन करना चाहता हूं - 25 (मुझे कोई शोर नहीं मानना)। अब, विधि शोर के बहुत छोटे कारकों (भिन्नता) के साथ विश्वसनीय होना चाहिए और बाद में कुछ व्यावहारिक छवि के शोर स्तर (स्वतंत्र शोर मॉडल के साथ) धन्यवाद। पीएस क्या आप मुझे इंगित कर सकते हैं कि मुझे लेख में कहां देखना चाहिए? क्या आप किसी और को जानते हैं? – Royi

+0

क्या आप पेपर का पूरा संदर्भ देने की परवाह करेंगे? आपके द्वारा प्रदान किया गया लिंक अब मर चुका है। धन्यवाद। – user1735003

+0

@ user1735003 शायद यह यह पेपर है: http://redwood.berkeley.edu/w/images/6/69/08-atick-nc-1992.pdf (मृत लिंक यूआरएल से धारणा) –

4

आप शोर विचरण अनुमान लगाने के लिए निम्न विधि का उपयोग कर सकते हैं (इस कार्यान्वयन केवल ग्रेस्केल छवियों के लिए काम करता है):

def estimate_noise(I): 

    H, W = I.shape 

    M = [[1, -2, 1], 
     [-2, 4, -2], 
     [1, -2, 1]] 

    sigma = np.sum(np.sum(np.absolute(convolve2d(I, M)))) 
    sigma = sigma * math.sqrt(0.5 * math.pi)/(6 * (W-2) * (H-2)) 

    return sigma 

संदर्भ: जे Immerkær, "फास्ट शोर विचरण आकलन", कंप्यूटर विजन और छवि को समझना , वॉल्यूम । 64, नंबर 2, पीपी 300-302, सितम्बर 1996 [PDF]

+0

धन्यवाद। मुझे इसे एक मौका और देना होगा। – Royi

संबंधित मुद्दे