예제 #1
0
파일: main.py 프로젝트: nma2207/term_paper
def test_blind():
    im = plt.imread('original/lena.bmp')
    gray = images.make_gray(im)

    gray = np.float64(gray)
    #h=convolves.gaussian(13,15,15)
    h = convolves.motion_blur(20, 30)
    #con=convolves.convolution2(gray, h)
    con = convolves.convolution2(gray, h)
    plt.imsave(fname='l_r_blind/real_h.bmp',
               arr=np.uint8(images.correct_image(h * 255)),
               cmap='gray')
    filt, new_h = filters.lucy_richardson_blind_deconvolution0_1(
        images.make0to1(con), 50, 1, images.make0to1(gray))
    plt.imsave(fname='l_r_blind/new_lena.bmp',
               arr=np.uint8(images.correct_image(filt)),
               cmap='gray')
    plt.figure()
    plt.subplot(1, 5, 1)
    plt.imshow(gray, cmap='gray')
    plt.title('Original')
    plt.subplot(1, 5, 2)
    plt.imshow(np.uint8(images.correct_image(con)), cmap='gray')
    plt.title('Convoluton')
    plt.subplot(1, 5, 3)
    plt.imshow(np.uint8(images.correct_image(filt)), cmap='gray')
    plt.title('L-R blind\nn=20, m=10')
    plt.subplot(1, 5, 4)
    plt.imshow(h, cmap='gray')
    plt.title('PSF\ngaussian\nsigma=15, 13x13')
    plt.subplot(1, 5, 5)
    plt.imshow(new_h, cmap='gray')
    plt.title('new PSF')
    plt.show()
예제 #2
0
파일: main.py 프로젝트: nma2207/term_paper
def test_l_r_graph():
    im = plb.imread("original/my_bike.jpg")
    #h=convolves.motion_blur(20,30)
    gray = images.make_gray(im)
    h = convolves.gaussian(10, 15, 15)
    con = convolves.convolution(gray, h)
    #con, noise=convolves.add_normal_noise(con, 0, 1)
    start = time.time()
    print 'go'
    filt = filters.lucy_richardson_deconvolution(con,
                                                 h,
                                                 eps=0,
                                                 original=gray,
                                                 N=82)
    print 'end'
    end = time.time()
    f = filt
    #print im.shape, filt[:512,:512,:3].shape
    #print images.compare_images_rgb(im, f)
    print end - start
    #np.set_printoptions(threshold=np.nan)
    print con
    plt.figure()
    plt.subplot(1, 4, 1)
    plt.imshow(gray, cmap='gray')
    plt.title('original')
    plt.subplot(1, 4, 2)
    plt.imshow(np.uint8(images.correct_image(con)), cmap='gray')
    plt.title('Gaussian blur\nsigma=10, size=15x15\nnoise~N(0,1)')
    #plt.title('Motion blur\nlen=20, ang=30\nnoise~N(0,1)')
    plt.subplot(1, 4, 3)
    plt.imshow(np.uint8(images.correct_image(filt)), cmap='gray')
    #plt.title('Tikhonov regulerization\ngamma=1e-02')
    plt.title('Lucy-Richardson deconvolution\neps=5000')
    plt.subplot(1, 4, 4)
    plt.imshow(h, cmap='gray')
    plt.title('PSF')
    plt.show()
예제 #3
0
파일: main.py 프로젝트: nma2207/term_paper
def test_pir():
    im = plt.imread('original/lena.bmp')
    gray = images.make_gray(im)

    gray = np.float64(gray)
    h = convolves.gaussian(13, 15, 15)
    #h=convolves.motion_blur(20,30)
    #print 'real_h =',h
    #con=convolves.convolution2(gray, h)
    con = convolves.convolution(gray, h)
    plt.imsave(fname='l_r_blind/real_h.bmp',
               arr=np.uint8(images.correct_image(h * 255)),
               cmap='gray')
    filt, new_h = filters.lucy_richardson_blind_deconvolution_pir(
        con, 5, 1, 1, 501, 'gaussian', original=gray)
    #filt=images.correct_image(filt*255)
    plt.imsave(fname='l_r_blind/new_lena.bmp',
               arr=np.uint8(images.correct_image(filt)),
               cmap='gray')
    plt.figure()
    plt.subplot(1, 5, 1)
    plt.imshow(gray, cmap='gray')
    plt.title('Original')
    plt.subplot(1, 5, 2)
    plt.imshow(np.uint8(images.correct_image(con)), cmap='gray')
    plt.title('Convoluton')
    plt.subplot(1, 5, 3)
    plt.imshow(np.uint8(images.correct_image(filt)), cmap='gray')
    plt.title('L-R blind\nn=20, m=10')
    plt.subplot(1, 5, 4)
    plt.imshow(h, cmap='gray')
    plt.title('PSF\nmotion blur\nlen=20 ang=30')
    plt.subplot(1, 5, 5)
    plt.imshow(new_h, cmap='gray')
    plt.title('new PSF')
    #print images.compare_images(gray, con[:g])
    #print images.compare_images(gray, filt)
    plt.show()
예제 #4
0
def lucy_richardson_blind_deconvolution_pir(g, n, m,d, max_psf_size=0, init_h_mode='gaussian', original=None):
    # g - blurred image
    # m, n - count of interation in RL-method
    # max_psf_size - How long must be PSF
    # init_h_mode - How initialize PSF:
    #   'gaussian' - gaussian PSF size = 3x3, sigma =
    #   'horizontal' - motion blur size 3x3, ang=0
    #   'vertical' - motion blir size 3x3 ang = 90
    #   'wow'      - init with g
    plt.imsave(fname='l_r_blind/g.bmp', arr=np.uint8(g), cmap='gray')
    if max_psf_size==0:
        max_psf_size = min(g.shape[0], g.shape[1])

    #
    # init h:
    #
    if init_h_mode=='gaussian':
        h = conv.gaussian(1,3,3)
    elif init_h_mode == 'horizontal':
        h = np.array([[0,0,0],
                   [1,1,1],
                   [0,0,0]], dtype=float)/3.
    elif init_h_mode == 'vertical':
        h  =np.array([[0,1,0],
                   [0,1,0],
                   [0,1,0]], dtype=float)/3.
    elif init_h_mode == 'wow':
        mini_g=smisc.imresize(g, (3,3))
        h = (1. / np.sum(mini_g) ** 2) * conv.correlation2(mini_g, mini_g)
        h /= np.sum(h)
    else:
        h = conv.random_psf(3,3)
    print h
    s=3
    err=[]
    while (s<=max_psf_size):
        print 'size =',s
        mini_g=smisc.imresize(g, (s,s))
        f = lucy_richardson_deconvolution(mini_g, h, 20000)
        if (s!=3):
            h=smisc.imresize(h, (s,s))
        for k in range (d):
            if(k!=0):
                f = lucy_richardson_deconvolution(mini_g, h, 20000)
            for i in range(n):
                #f_prev = np.copy(f)

                #Correct h
                h_prev=np.copy(h)
                for k in range(m):
                    p = mini_g / (conv.convolution2(f, h))
                    flr = np.fliplr(np.flipud(f))
                    h = conv.convolution2(p, flr)*h
                    #h /= np.sum(h)
                    #print 'h =',h

                for k in range(m):
                    p = mini_g / (conv.convolution2(h_prev, f))
                    hlr = np.fliplr(np.flipud(h_prev))
                    f = conv.convolution2(p, hlr) * f
                print (float(i + 1) / n) * 100, ' %'
                name = 'l_r_blind/new_lena' +str(s)+'_'+ str(i) + '.bmp'
                h_name = 'l_r_blind/h_'+str(s)+'_' + str(i) + '.bmp'
                plt.imsave(fname=name, arr=np.uint8(images.correct_image(f)), cmap='gray')
                plt.imsave(fname=h_name, arr=np.uint8(images.correct_image(h*255)), cmap='gray')
        s=int(s*math.sqrt(2))
        #
        if(original!=None):
            good_f = lucy_richardson_deconvolution(g, h, 20000)
            print good_f.shape
            dx = (good_f.shape[0]-original.shape[0])//2
            dy = (good_f.shape[1]-original.shape[1])//2
            err.append(images.compare_images(good_f[dx:original.shape[0]+dx,
                                                    dy:original.shape[1] + dy],
                                             original))
    err=np.array(err)
    plt.figure()
    plt.plot(np.arange(err.size), err)
    #plt.imshow(h,cmap='gray')
    plt.show()
    f = lucy_richardson_deconvolution(g, h, 5000)
    return f, h
예제 #5
0
def lucy_richardson_blind_deconvolution0_1(g, n, m, original):
    #init h
    print 'First error',images.compare_images(g, original)
    plt.imsave(fname='l_r_blind/g.bmp', arr=np.uint8(images.make0to255(g)), cmap='gray')
    #h1=conv.random_psf(3,3)
    # h1[1,:3]=1/3.
    ##h=np.zeros(g.shape, dtype=float)
    #h[255:258, 255:258]=h1
    h = (1. / np.sum(g) ** 2) * conv.correlation2(g, g)
    h/=np.sum(h)
    #h=conv.random_psf(g.shape[0], g.shape[1])
    #h/=np.sum(h)
    #h = conv.correlation2(g, g)
   # print np.sum(h)
    #h/=np.sum(h)
    plt.imsave(fname='l_r_blind/init_h.bmp', arr=np.uint8(images.make0to255(h)), cmap='gray')
    print 'h sum=', np.sum(h)
    #h[255:258, 255:258]=h1
    f=np.copy(g)
    print 'blind l-r'
    print '0  %'
    errors=[]
    for i in range(n):
        f_prev=np.copy(f)

        #print 'h:'
        #print '-- 0 %'
        for k in range(m):
            p = g / (conv.convolution2(f, h))
            flr=np.fliplr(np.flipud(f))
            h=conv.convolution2(p,flr)*h
            h/=np.sum(f)
            #h/=np.sum(h)
            #h = (1. / np.sum(f)) * (h * conv.correlation2(f, p))
            # p=g/(sg.convolve2d(f,h, mode='same'))
            # h=(1./np.sum(f))*(h*sg.correlate2d(f,p,mode='same'))
            #print '--', float(k+1) / m * 100, '%'

            # f=(1./np.sum(h))*(f*sg.correlate2d(h,p,mode='same'))
            # print 'f:'
            # print '-- 0 %'
            h /= np.sum(h)
            for k in range(m):
                p = g / (conv.convolution2(f, h))
                hlr = np.fliplr(np.flipud(h))
                f = conv.convolution2(p, hlr) * f
                # f = (1. / np.sum(h)) * (f * conv.correlation2(h, p))
                # p=g/(sg.convolve2d(f,h, mode='same'))
                # print '--', float(k+1) / m * 100, '%'
            #images.check_image(f)
        print (float(i+1) / n) * 100, ' %'
        name='l_r_blind/new_lena'+str(i)+'.bmp'
        h_name='l_r_blind/h_'+str(i)+'.bmp'
        plt.imsave(fname=name, arr=np.uint8(images.make0to255(f)), cmap='gray')
        #print 't and f comp', images.compare_images(temp, f)
        plt.imsave(fname=h_name, arr=np.uint8(images.make0to255(h)), cmap='gray')
        images.check_image(images.correct_image(f))
        error = images.compare_images(images.correct_image(f), original)
        errors.append(error)
        print 'err =',error
    errors=np.array(errors)
    plt.figure()
    plt.plot(np.arange(errors.size), errors)
    plt.xlabel('Steps')
    plt.ylabel('Dif btw original and f_k')
    plt.show()
    return f,h