Exemple #1
0
def perfromMeasurements(NewIdxs, CodePath, TestingImageSet, ImNum,
                        ImageExtension, MeasuredIdxs, BatchSamplingParams,
                        SimulationRun):
    Img = loadTestImage(CodePath, TestingImageSet, ImNum, ImageExtension,
                        SimulationRun)
    if BatchSamplingParams.Do == 'N':
        NewValues = Img[NewIdxs[0], NewIdxs[1]]
    else:
        NewValues = Img[NewIdxs[:, 0], NewIdxs[:, 1]]
    return NewValues
Exemple #2
0
def perfromInitialMeasurements(CodePath, TestingImageSet, ImNum,
                               ImageExtension, Mask, SimulationRun):

    Img = loadTestImage(CodePath, TestingImageSet, ImNum, ImageExtension,
                        SimulationRun)
    if Mask.shape[0] != Img.shape[0] or Mask.shape[1] != Img.shape[1]:
        sys.exit(
            'Error!!! The dimensions you entered in "SizeImage" do not match the dimensions of the testing image in ./ResultsAndData/TestingImages/TestingImageSet_'
            + TestingImageSet)
    MeasuredValues = Img[Mask == 1]
    return (MeasuredValues)
def performReconOnce(SavePath, TrainingInfo, Resolution, SizeImage, ImageType,
                     CodePath, TestingImageSet, ImNum, ImageExtension,
                     SimulationRun, MeasuredIdxs, UnMeasuredIdxs,
                     MeasuredValues):

    NeighborValues, NeighborWeights, NeighborDistances = FindNeighbors(
        TrainingInfo, MeasuredIdxs, UnMeasuredIdxs, MeasuredValues, Resolution)
    ReconValues, ReconImage = ComputeRecons(TrainingInfo, NeighborValues,
                                            NeighborWeights, SizeImage,
                                            UnMeasuredIdxs, MeasuredIdxs,
                                            MeasuredValues)

    Img = loadTestImage(CodePath, TestingImageSet, ImNum, ImageExtension,
                        SimulationRun)

    Difference = np.sum(computeDifference(Img, ReconImage, ImageType))
    return (Difference, ReconImage)
Exemple #4
0
def runEDSSLADSSimulationOnce(Mask, CodePath, ImageSet, SizeImage,
                              StopCondParams, Theta, TrainingInfo, Resolution,
                              ImageType, UpdateERDParams, BatchSamplingParams,
                              SavePath, SimulationRun, ImNum, ImageExtension,
                              PlotResult, Classify, EDSData, tfclf):

    #    global sess, new_saver1
    #    global W_conv1, W_conv2, W_fc1, W_fc2, W_fc3, W_fco, b_conv1, b_conv2, b_fc1, b_fc2, b_fc3, b_fco
    #    global x_image, x, y_, h_conv1, h_conv2, h_pool1, h_pool2, size_hp, h_flat, h_fc1, h_fc2, h_fc3, keep_prob, h_fc1_drop, y_conv

    from relatedToEDS import loadSpectrum
    from relatedToEDS import classifySpectrum
    from relatedToEDS import regressSpectrum

    y_tar = np.zeros(100)
    for i in range(0, 100):
        y_tar[i] = i

    MeasuredIdxs = np.transpose(np.where(Mask == 1))
    UnMeasuredIdxs = np.transpose(np.where(Mask == 0))

    ContinuousMeasuredValues = perfromInitialMeasurements(
        CodePath, ImageSet, ImNum, ImageExtension, Mask, SimulationRun)
    if Classify == '2C':
        Threshold = filters.threshold_otsu(ContinuousMeasuredValues)
        print(
            'Threhold found using the Otsu method for 2 Class classification = '
            + str(Threshold))
        MeasuredValues = ContinuousMeasuredValues < Threshold
        MeasuredValues = MeasuredValues + 0
    #    elif Classify=='MC':
    #### Classification function to output NewValues ##################
    # NewValues is the vector of measured values post classification
    elif Classify == 'EDS':
        MeasuredValues = ContinuousMeasuredValues
        MeasuredWithoutnoiseValues = ContinuousMeasuredValues
        for t in range(0, len(ContinuousMeasuredValues)):
            s, phase = loadSpectrum(ContinuousMeasuredValues[t], EDSData,
                                    CodePath)
            regressValue = regressSpectrum(s, CodePath, EDSData)
            #print(np.var(np.abs(regressValue-y_tar)))
            if np.var(np.abs(regressValue - y_tar)) <= 100.0:
                #            if(1):
                classLabel = classifySpectrum(s, CodePath, EDSData, tfclf)
                if np.int(phase) == np.int(classLabel):
                    print("true")
                else:
                    print("wrong")
#                classLabel = np.argmax(sess.run(y_conv, feed_dict={x: s, y_: np.zeros((1,2)), keep_prob: 1.0}))
            else:
                classLabel = 0
            #print(classLabel)
            MeasuredValues[t] = classLabel
            MeasuredWithoutnoiseValues[t] = phase
    elif Classify == 'N':
        MeasuredValues = ContinuousMeasuredValues

    # Perform SLADS
    IterNum = 0
    Stop = 0
    NumSamples = np.shape(MeasuredValues)[0]
    StopCondFuncVal = np.zeros((int(
        (SizeImage[0] * SizeImage[1]) * (StopCondParams.MaxPercentage) / 100) +
                                10, 2))
    while Stop != 1:

        if IterNum == 0:
            Mask, MeasuredValues, ERDValues, ReconValues, ReconImage, NewIdxs, MaxIdxsVect = updateERDandFindNewLocationFirst(
                Mask, MeasuredValues, MeasuredIdxs, UnMeasuredIdxs, Theta,
                SizeImage, TrainingInfo, Resolution, ImageType, NumSamples,
                UpdateERDParams, BatchSamplingParams)
        else:
            Mask, MeasuredValues, ERDValues, ReconValues, ReconImage, NewIdxs, MaxIdxsVect = updateERDandFindNewLocationAfter(
                Mask, MeasuredValues, MeasuredIdxs, UnMeasuredIdxs, Theta,
                SizeImage, TrainingInfo, Resolution, ImageType,
                UpdateERDParams, BatchSamplingParams, StopCondFuncVal, IterNum,
                NumSamples, NewIdxs, ReconValues, ReconImage, ERDValues,
                MaxIdxsVect)

        NewContinuousValues = perfromMeasurements(NewIdxs, CodePath, ImageSet,
                                                  ImNum, ImageExtension,
                                                  MeasuredIdxs,
                                                  BatchSamplingParams,
                                                  SimulationRun)
        ContinuousMeasuredValues = np.hstack(
            (ContinuousMeasuredValues, NewContinuousValues))
        if Classify == '2C':
            NewValues = NewContinuousValues > Threshold
            NewValues = NewValues + 0
        #        elif Classify=='MC':
        #### Classification function to output NewValues ##################
        # NewValues is the vector of measured values post classification
        elif Classify == 'EDS':
            NewValues = NewContinuousValues
            NewMeasuredWithoutnoiseValues = NewContinuousValues
            if BatchSamplingParams.NumSamplesPerIter > 1:
                for t in range(0, len(NewContinuousValues)):
                    s, phase = loadSpectrum(NewContinuousValues[t], EDSData,
                                            CodePath)
                    regressValue = regressSpectrum(s, CodePath, EDSData)
                    if np.var(np.abs(regressValue - y_tar)) <= 100.0:
                        #if(1):
                        classLabel = classifySpectrum(s, CodePath, EDSData,
                                                      tfclf)
                    else:
                        classLabel = 0
                    NewValues[t] = classLabel
                    NewMeasuredWithoutnoiseValues[t] = phase
            else:
                s, phase = loadSpectrum(NewContinuousValues, EDSData, CodePath)
                regressValue = regressSpectrum(s, CodePath, EDSData)
                if np.var(np.abs(regressValue - y_tar)) <= 100.0:
                    #                if(1):
                    classLabel = classifySpectrum(s, CodePath, EDSData, tfclf)
                else:
                    classLabel = 0
                NewValues = classLabel
                NewMeasuredWithoutnoiseValues = phase
        elif Classify == 'N':
            NewValues = NewContinuousValues
        MeasuredWithoutnoiseValues = np.hstack(
            (MeasuredWithoutnoiseValues, NewMeasuredWithoutnoiseValues))
        Mask, MeasuredValues, MeasuredIdxs, UnMeasuredIdxs = updateMeasurementArrays(
            NewIdxs, MaxIdxsVect, Mask, MeasuredValues, MeasuredIdxs,
            UnMeasuredIdxs, NewValues, BatchSamplingParams)

        NumSamples = np.shape(MeasuredValues)[0]

        StopCondFuncVal = computeStopCondFuncVal(ReconValues, MeasuredValues,
                                                 StopCondParams, ImageType,
                                                 StopCondFuncVal, MaxIdxsVect,
                                                 NumSamples, IterNum,
                                                 BatchSamplingParams)

        Stop = checkStopCondFuncThreshold(StopCondParams, StopCondFuncVal,
                                          NumSamples, IterNum, SizeImage)
        if PlotResult == 'Y' and np.remainder(
                NumSamples, round(0.01 * SizeImage[0] * SizeImage[1])) == 0:
            print(
                str(np.round(NumSamples * 100 /
                             (SizeImage[0] * SizeImage[1]))) +
                ' Percent Sampled')
            np.save(SavePath + 'MeasuredValues', MeasuredValues)
            np.save(SavePath + 'MeasuredIdxs', MeasuredIdxs)
            np.save(SavePath + 'UnMeasuredIdxs', UnMeasuredIdxs)
            np.save(SavePath + 'StopCondFuncVal', StopCondFuncVal)
            np.save(SavePath + 'ContinuousMeasuredValues',
                    ContinuousMeasuredValues)
            np.save(SavePath + 'MeasuredWithoutnoiseValues',
                    MeasuredWithoutnoiseValues)
        IterNum += 1

    np.save(SavePath + 'MeasuredValues', MeasuredValues)
    np.save(SavePath + 'MeasuredIdxs', MeasuredIdxs)
    np.save(SavePath + 'UnMeasuredIdxs', UnMeasuredIdxs)
    np.save(SavePath + 'StopCondFuncVal', StopCondFuncVal)
    np.save(SavePath + 'ContinuousMeasuredValues', ContinuousMeasuredValues)
    np.save(SavePath + 'MeasuredWithoutnoiseValues',
            MeasuredWithoutnoiseValues)

    savemat(SavePath + 'MeasuredIdxs.mat', dict(MeasuredIdxs=MeasuredIdxs))
    savemat(SavePath + 'MeasuredValues.mat',
            dict(MeasuredValues=MeasuredValues))
    savemat(SavePath + 'UnMeasuredIdxs.mat',
            dict(UnMeasuredIdxs=UnMeasuredIdxs))
    savemat(SavePath + 'StopCondFuncVal.mat',
            dict(StopCondFuncVal=StopCondFuncVal))
    savemat(SavePath + 'ContinuousMeasuredValues.mat',
            dict(ContinuousMeasuredValues=ContinuousMeasuredValues))
    savemat(SavePath + 'MeasuredWithoutnoiseValues.mat',
            dict(MeasuredWithoutnoiseValues=MeasuredWithoutnoiseValues))

    if PlotResult == 'Y':
        print(
            str(np.round(NumSamples * 100 / (SizeImage[0] * SizeImage[1]))) +
            ' Percent Sampled before stopping')
        Difference, ReconImage = performReconOnce(
            SavePath, TrainingInfo, Resolution, SizeImage, ImageType, CodePath,
            ImageSet, ImNum, ImageExtension, SimulationRun, MeasuredIdxs,
            UnMeasuredIdxs, MeasuredValues)
        TD = Difference / (SizeImage[0] * SizeImage[1])
        img = loadTestImage(CodePath, ImageSet, ImNum, ImageExtension,
                            SimulationRun)
        print('')
        print('')
        print('######################################')
        print('Total Distortion = ' + str(TD))

        from plotter import plotAfterSLADSSimulation
        plotAfterSLADSSimulation(Mask, ReconImage, img)
        pylab.show()
Exemple #5
0
def runSLADSSimulationOnce(Mask, CodePath, ImageSet, SizeImage, StopCondParams,
                           Theta, TrainingInfo, Resolution, ImageType,
                           UpdateERDParams, BatchSamplingParams, SavePath,
                           SimulationRun, ImNum, ImageExtension, PlotResult,
                           Classify):

    MeasuredIdxs = np.transpose(np.where(Mask == 1))
    UnMeasuredIdxs = np.transpose(np.where(Mask == 0))

    ContinuousMeasuredValues = perfromInitialMeasurements(
        CodePath, ImageSet, ImNum, ImageExtension, Mask, SimulationRun)

    ####
    #    MeasuredIdxs, ContinuousMeasuredValues, travdist = pathOrder(MeasuredIdxs, ContinuousMeasuredValues, np.array([0,0]))
    ####

    if Classify == '2C':
        Threshold = filters.threshold_otsu(ContinuousMeasuredValues)
        print(
            'Threhold found using the Otsu method for 2 Class classification = '
            + str(Threshold))
        MeasuredValues = ContinuousMeasuredValues < Threshold
        MeasuredValues = MeasuredValues + 0
#    elif Classify=='MC':
#### Classification function to output NewValues ##################
# NewValues is the vector of measured values post classification
    elif Classify == 'N':
        MeasuredValues = ContinuousMeasuredValues

    # Perform SLADS
    IterNum = 0
    Stop = 0
    NumSamples = np.shape(MeasuredValues)[0]
    StopCondFuncVal = np.zeros((int(
        (SizeImage[0] * SizeImage[1]) * (StopCondParams.MaxPercentage) / 100) +
                                10, 2))
    while Stop != 1:

        if IterNum == 0:
            Mask, MeasuredValues, ERDValues, ReconValues, ReconImage, NewIdxs, MaxIdxsVect = updateERDandFindNewLocationFirst(
                Mask, MeasuredValues, MeasuredIdxs, UnMeasuredIdxs, Theta,
                SizeImage, TrainingInfo, Resolution, ImageType, NumSamples,
                UpdateERDParams, BatchSamplingParams)
        else:
            Mask, MeasuredValues, ERDValues, ReconValues, ReconImage, NewIdxs, MaxIdxsVect = updateERDandFindNewLocationAfter(
                Mask, MeasuredValues, MeasuredIdxs, UnMeasuredIdxs, Theta,
                SizeImage, TrainingInfo, Resolution, ImageType,
                UpdateERDParams, BatchSamplingParams, StopCondFuncVal, IterNum,
                NumSamples, NewIdxs, ReconValues, ReconImage, ERDValues,
                MaxIdxsVect)

        NewContinuousValues = perfromMeasurements(NewIdxs, CodePath, ImageSet,
                                                  ImNum, ImageExtension,
                                                  MeasuredIdxs,
                                                  BatchSamplingParams,
                                                  SimulationRun)

        ####
        #        NewIdxs, NewContinuousValues, travdist = pathOrder(NewIdxs, NewContinuousValues, MeasuredIdxs[-1])
        ####

        ContinuousMeasuredValues = np.hstack(
            (ContinuousMeasuredValues, NewContinuousValues))

        if Classify == '2C':
            NewValues = NewContinuousValues > Threshold
            NewValues = NewValues + 0
#        elif Classify=='MC':
#### Classification function to output NewValues ##################
# NewValues is the vector of measured values post classification
        elif Classify == 'N':
            NewValues = NewContinuousValues

        Mask, MeasuredValues, MeasuredIdxs, UnMeasuredIdxs = updateMeasurementArrays(
            NewIdxs, MaxIdxsVect, Mask, MeasuredValues, MeasuredIdxs,
            UnMeasuredIdxs, NewValues, BatchSamplingParams)

        NumSamples = np.shape(MeasuredValues)[0]

        StopCondFuncVal = computeStopCondFuncVal(ReconValues, MeasuredValues,
                                                 StopCondParams, ImageType,
                                                 StopCondFuncVal, MaxIdxsVect,
                                                 NumSamples, IterNum,
                                                 BatchSamplingParams)

        Stop = checkStopCondFuncThreshold(StopCondParams, StopCondFuncVal,
                                          NumSamples, IterNum, SizeImage)
        if PlotResult == 'Y' and np.remainder(
                NumSamples, round(0.01 * SizeImage[0] * SizeImage[1])) == 0:
            print(
                str(np.round(NumSamples * 100 /
                             (SizeImage[0] * SizeImage[1]))) +
                ' Percent Sampled')
        IterNum += 1

        ###


#        np.save(SavePath + 'MeasuredIdxs_order', MeasuredIdxs_Order)
#        np.save(SavePath + 'ContinuousMeasuredValues_order', ContinuousMeasuredValues_order)
###

    np.save(SavePath + 'MeasuredValues', MeasuredValues)
    np.save(SavePath + 'MeasuredIdxs', MeasuredIdxs)
    np.save(SavePath + 'UnMeasuredIdxs', UnMeasuredIdxs)
    np.save(SavePath + 'StopCondFuncVal', StopCondFuncVal)
    np.save(SavePath + 'ContinuousMeasuredValues', ContinuousMeasuredValues)
    savemat(SavePath + 'MeasuredIdxs.mat', dict(MeasuredIdxs=MeasuredIdxs))
    savemat(SavePath + 'MeasuredValues.mat',
            dict(MeasuredValues=MeasuredValues))
    savemat(SavePath + 'UnMeasuredIdxs.mat',
            dict(UnMeasuredIdxs=UnMeasuredIdxs))
    savemat(SavePath + 'StopCondFuncVal.mat',
            dict(StopCondFuncVal=StopCondFuncVal))
    savemat(SavePath + 'ContinuousMeasuredValues.mat',
            dict(ContinuousMeasuredValues=ContinuousMeasuredValues))

    if PlotResult == 'Y':
        print(
            str(np.round(NumSamples * 100 / (SizeImage[0] * SizeImage[1]))) +
            ' Percent Sampled before stopping')
        Difference, ReconImage = performReconOnce(
            SavePath, TrainingInfo, Resolution, SizeImage, ImageType, CodePath,
            ImageSet, ImNum, ImageExtension, SimulationRun, MeasuredIdxs,
            UnMeasuredIdxs, MeasuredValues)
        TD = Difference / (SizeImage[0] * SizeImage[1])
        img = loadTestImage(CodePath, ImageSet, ImNum, ImageExtension,
                            SimulationRun)
        print('')
        print('')
        print('######################################')
        print('Total Distortion = ' + str(TD))

        from plotter import plotAfterSLADSSimulation
        plotAfterSLADSSimulation(Mask, ReconImage, img)
        pylab.show()