Example #1
0
def CalcPartialCrossCorrFun(img1, img2, nDiv, fragCoords):
    roiNR, roiNC = img1.height // nDiv, img1.width // nDiv
    fragsToCorrelate1 = []
    fragsToCorrelate2 = []

    for x, y in fragCoords:
        frag1 = imsup.CropImageROI(img1, (y * roiNR, x * roiNC),
                                   (roiNR, roiNC), 1)
        fragsToCorrelate1.append(frag1)

        frag2 = imsup.CropImageROI(img2, (y * roiNR, x * roiNC),
                                   (roiNR, roiNC), 1)
        fragsToCorrelate2.append(frag2)

    ccfAvg = imsup.Image(roiNR, roiNC, imsup.Image.cmp['CAP'],
                         imsup.Image.mem['GPU'])

    for frag1, frag2 in zip(fragsToCorrelate1, fragsToCorrelate2):
        ccf = CalcCrossCorrFun(frag1, frag2)
        ccfAvg.amPh.am = arrsup.AddTwoArrays(ccfAvg.amPh.am, ccf.amPh.am)

    return ccfAvg
Example #2
0
def CalcCrossCorrFun(img1, img2):
    fft1 = FFT(img1)
    fft2 = FFT(img2)

    fft1.ReIm2AmPh()
    fft2.ReIm2AmPh()

    fft3 = imsup.Image(fft1.height, fft1.width, imsup.Image.cmp['CAP'],
                       imsup.Image.mem['GPU'])
    fft1.amPh = imsup.ConjugateAmPhMatrix(fft1.amPh)
    fft3.amPh = imsup.MultAmPhMatrices(fft1.amPh, fft2.amPh)
    fft3.amPh.am = arrsup.CalcSqrtOfArray(fft3.amPh.am)  # mcf ON

    # ---- ccf ----
    # fft3.amPh.am = fft1.amPh.am * fft2.amPh.am
    # fft3.amPh.ph = -fft1.amPh.ph + fft2.amPh.ph
    # ---- mcf ----
    # fft3.amPh.am = np.sqrt(fft1.amPh.am * fft2.amPh.am)
    # fft3.amPh.ph = -fft1.amPh.ph + fft2.amPh.ph

    ccf = IFFT(fft3)
    ccf = FFT2Diff(ccf)
    ccf.ReIm2AmPh()
    return ccf
Example #3
0
def CalcAverageCrossCorrFun(img1, img2, nDiv):
    roiNR, roiNC = img1.height // nDiv, img1.width // nDiv
    fragsToCorrelate1 = []
    fragsToCorrelate2 = []

    # mozna to wszystko urownoleglic (tak jak w CreateFragment())
    for y in range(0, nDiv):
        for x in range(0, nDiv):
            frag1 = imsup.CropImageROI(img1, (y * roiNR, x * roiNC),
                                       (roiNR, roiNC), 1)
            fragsToCorrelate1.append(frag1)

            frag2 = imsup.CropImageROI(img2, (y * roiNR, x * roiNC),
                                       (roiNR, roiNC), 1)
            fragsToCorrelate2.append(frag2)

    ccfAvg = imsup.Image(roiNR, roiNC, imsup.Image.cmp['CAP'],
                         imsup.Image.mem['GPU'])

    for frag1, frag2 in zip(fragsToCorrelate1, fragsToCorrelate2):
        ccf = CalcCrossCorrFun(frag1, frag2)
        ccfAvg.amPh.am = arrsup.AddTwoArrays(ccfAvg.amPh.am, ccf.amPh.am)

    return ccfAvg
Example #4
0
def PerformIWFR(images, N):
    imgHeight, imgWidth = images[0].height, images[0].width
    ewfResultsDir = 'results/ewf/'
    ewfAmName = 'am'
    ewfPhName = 'ph'
    # backCTFunctions = []
    # forwCTFunctions = []

    print('Starting IWFR...')

    # storing contrast transfer functions

    # for img in images:
    #     # print(imgWidth, img.px_dim, -img.defocus)
    #     ctf = CalcTransferFunction(imgWidth, img.px_dim, -img.defocus)
    #     ctf.AmPh2ReIm()
    #     # ctf.reIm = ccc.Diff2FFT(ctf.reIm)
    #     backCTFunctions.append(ctf)
    #
    #     ctf = CalcTransferFunction(imgWidth, img.px_dim, img.defocus)
    #     ctf.AmPh2ReIm()
    #     # ctf.reIm = ccc.Diff2FFT(ctf.reIm)
    #     forwCTFunctions.append(ctf)

    # start IWFR procedure

    exitWave = imsup.Image(imgHeight, imgWidth, imsup.Image.cmp['CRI'],
                           imsup.Image.mem['GPU'])

    for i in range(0, N):
        print('Iteration no {0}...'.format(i + 1))
        imsup.ClearImageData(exitWave)

        # backpropagation (to in-focus plane)
        ccfg.GetGPUMemoryUsed()  # !!!

        for img, idx in zip(images, range(0, len(images))):
            # img = PropagateWave(img, backCTFunctions[idx])    # faster, but uses more memory
            img = PropagateToFocus(img)  # slower, but uses less memory
            img.AmPh2ReIm()
            exitWave.reIm = arrsup.AddTwoArrays(exitWave.reIm, img.reIm)

        exitWave.reIm = arrsup.MultArrayByScalar(exitWave.reIm,
                                                 1 / len(images))

        ewfAmPath = ewfResultsDir + ewfAmName + str(i + 1) + '.png'
        ewfPhPath = ewfAmPath.replace(ewfAmName, ewfPhName)
        ewfAmplPhPath = ewfPhPath.replace(ewfPhName, ewfPhName + 'Ampl')
        imsup.SaveAmpImage(exitWave, ewfAmPath)
        imsup.SavePhaseImage(exitWave, ewfPhPath)
        amplifExitPhase = FilterPhase(exitWave)
        imsup.SavePhaseImage(amplifExitPhase, ewfAmplPhPath)

        # forward propagation (to the original focus plane)
        ccfg.GetGPUMemoryUsed()  # !!!

        for img, idx in zip(images, range(0, len(images))):
            # images[idx] = PropagateWave(exitWave, forwCTFunctions[idx])
            images[idx] = PropagateBackToDefocus(exitWave, img.defocus)
            images[idx].amPh.am = img.amPh.am  # restore original amplitude

    print('All done')

    return exitWave