Пример #1
0
def eqHist (Image):
    ### Imports
    import numpy as np
    import matplotlib.pyplot as plt
    import math as m
    import navFunc as nf

    A = Image

    size = nf.structtype()
    size.A = nf.structtype()
    size.A.lin, size.A.col = A.shape

    #################### Equalize Histogram
    ## Pre-sets:

    newA = np.zeros((size.A.lin, size.A.col))

    for j in range((0), size.A.lin):
        for k in range((0), size.A.col):
            newA[j, k] = np.ceil(255*(
                         (A[j, k] - A.min()) /
                         (A.max() - A.min())))

    newImage = np.uint8(newA)

    print('################################')
    print('Process finished')
    print('Histogram has been equalized')
    print('################################')

    return newImage
def filterLaplace(Filter):
    ### Imports
    import numpy as np
    import matplotlib.pyplot as plt
    import math as m
    import navFunc as nf

    # Load image into numpy matrix

    A = Filter.img

    size = nf.structtype()
    size.A = nf.structtype()
    size.A.lin, size.A.col = A.shape

    #################### Laplace filter
    ## Pre-set steps:
    Filter.kernel = np.ones((Filter.kernelSize, Filter.kernelSize))
    Filter.kernel[int(Filter.kernelSize / 2),
                  int(Filter.kernelSize /
                      2)] = -1 * (np.sum(Filter.kernel) - 1)
    #################
    central = m.floor((Filter.kernelSize / 2))

    C = np.zeros((size.A.lin + central * 2, size.A.col + central * 2))
    C[(0 + central):(size.A.lin + central),
      (0 + central):(size.A.col + central)] = A

    #################
    ##  Run the kernel over the matrix (similar to convolution):
    #################
    soma = 0
    D = np.zeros(A.shape)

    for j in range((0), size.A.lin):
        for k in range((0), size.A.col):
            # Run kernel in one matrix's elements
            for kl in range(0, Filter.kernelSize):
                for kk in range(0, Filter.kernelSize):
                    # print(C[j + kl, k + kk])
                    # print(kernel[kl, kk])
                    # print('Result is: %d ' %(C[j + kl,k + kk] * kernel[kl,kk]))

                    soma = (C[j + kl, k + kk] * Filter.kernel[kl, kk]) + soma

                    # print('Pixel has finished')
            value = m.ceil((soma / (Filter.kernelSize * Filter.kernelSize)))
            soma = 0
            D[j, k] = value
            # print('LINE has finished')

    D = np.uint8(D)

    print('################################')
    print('Process finished')
    print('Filter have been applied')
    print('################################')

    return D
Пример #3
0
def filterMedian(Filter):
    ### Imports
    import numpy as np
    import matplotlib.pyplot as plt
    import math as m
    import navFunc as nf

    import time

    # Load image into numpy matrix

    A = Filter.img

    size = nf.structtype()
    size.A = nf.structtype()
    size.A.lin, size.A.col = A.shape

    #################### Mean filter
    ## Pre-set steps:
    Filter.kernel = np.ones((Filter.kernelSize, Filter.kernelSize))
    #################
    central = m.floor((Filter.kernelSize / 2))

    C = np.zeros((size.A.lin + central * 2, size.A.col + central * 2))
    C[(0 + central):(size.A.lin + central),
      (0 + central):(size.A.col + central)] = A

    #################
    ##  Run the kernel over the matrix (similar to convolution):
    #################
    buffer = np.zeros((Filter.kernelSize * Filter.kernelSize))
    D = np.zeros(A.shape)

    # for each line:
    for j in range((0), size.A.lin):
        # for each collumn:
        for k in range((0), size.A.col):
            # Run kernel in one matrix's elements
            ## for each line:
            for kl in range(0, Filter.kernelSize):
                ## for each collumn:
                for kk in range(0, Filter.kernelSize):

                    buffer[(Filter.kernelSize * kl + kk)] = (C[j + kl, k + kk])

            buffer = np.sort(buffer)
            value = buffer[int(np.floor((Filter.kernelSize**2) / 2))]

            D[j, k] = value
            # print('LINE has finished')

    D = np.uint8(D)

    print('################################')
    print('Process finished')
    print('Filter have been applied')
    print('################################')

    return D
Пример #4
0
def filterGaussian(Filter):
    ### Imports
    import numpy as np
    import matplotlib.pyplot as plt
    import math as m
    import navFunc as nf

    # Load image into numpy matrix

    A = Filter.img

    size = nf.structtype()
    size.A = nf.structtype()
    size.A.lin, size.A.col = A.shape

    #################### Gaussian filter
    ## Pre-set steps:
    ### Generate two kernersl (horizontal and vertical)
    #
    Filter.kernel = gaussianKernel(Filter.kernelSize, Filter.kernelSize)
    #################
    central = m.floor((Filter.kernelSize / 2))

    C = np.zeros((size.A.lin + central * 2, size.A.col + central * 2))
    C[(0 + central):(size.A.lin + central),
      (0 + central):(size.A.col + central)] = A

    #################
    ##  Run the kernel over the matrix (similar to convolution):
    #################
    soma = 0
    D = np.zeros(A.shape)

    for j in range((0), size.A.lin):
        for k in range((0), size.A.col):
            # Run kernel in one matrix's elements
            for kl in range(0, Filter.kernelSize):
                for kk in range(0, Filter.kernelSize):

                    soma = (C[j + kl, k + kk] * Filter.kernel[kl, kk]) + soma

            #value = m.ceil((soma / (Filter.kernelSize * Filter.kernelSize)))
            value = m.ceil((soma))
            soma = 0
            D[j, k] = value

    D = np.uint8(D)

    print('################################')
    print('Process finished')
    print('Filter have been applied')
    print('################################')

    return D
Пример #5
0
def limiar (Filter):
    ### Imports
    import numpy as np
    import matplotlib.pyplot as plt
    import math as m
    import navFunc as nf

    # Load image into numpy matrix

    A = Filter.img

    size = nf.structtype()
    size.A = nf.structtype()
    size.A.lin, size.A.col = A.shape

    #################### Limiar
    Tmin = np.min(A)
    Tmax = np.max(A)
    D = np.zeros(A.shape)

    for j in range((0), size.A.lin):
        for k in range((0), size.A.col):

            if A[j,k] > Filter.limiar:
                D[j, k] = Tmax
            else:
                D[j, k] = Tmin

    D = np.uint8(D)

    print('################################')
    print('Process finished')
    print('Limiar has been applied')
    print('################################')

    return D
Пример #6
0
def calcHist (Image):
    ### Imports
    import numpy as np
    import matplotlib.pyplot as plt
    import math as m
    import navFunc as nf

    # Load image into numpy matrix

    A = Image

    size = nf.structtype()
    size.A = nf.structtype()
    size.A.lin, size.A.col = A.shape

    #################### Calculate Histogram
    ## Pre-setes:
    if A.dtype == 'uint8':
        #buffer = np.linspace(0, 255, num = 2**8)
        #buffer = np.zeros((A.max()+1) - (A.min()))
        buffer = np.zeros((256))

    ## Read the intire matrix element-by-element:

    for j in range((0), size.A.lin):
        for k in range((0), size.A.col):

            buffer[(A[j, k])] += 1


    print('################################')
    print('Process finished')
    print('Histogram has been calculated')
    print('################################')

    return 100*buffer/(size.A.lin*size.A.col)
Пример #7
0
##########################################################################################
# Load necessary(or not) modules
import cv2
import numpy as np
import matplotlib.pyplot as plt
import math as m
import navFunc as nf
from navFunc.cls import cls

##########################################################################################
#### Open imagem:
img = cv2.imread('navar.png', cv2.IMREAD_GRAYSCALE)

##### Pre-sets #######################################################################
# Load image into numpy matrix
Filter = nf.structtype()  # Cria variavel do tipo struct (similar ao matlab)

Filter.img = np.array(img)

Filter.imgSize = nf.structtype()
Filter.imgSize.lin, Filter.imgSize.col = Filter.img.shape
#################### Filtro da média
Filter.ftype = 50

# Kernel def:

Filter.kernelSize = 3

numAp = 1
U = np.zeros((numAp, Filter.imgSize.lin, Filter.imgSize.col))
Пример #8
0
import cv2
import numpy as np
import matplotlib.pyplot as plt
import math as m
import navFunc as nf

img = cv2.imread('../figs/lena_color_256.tif', cv2.IMREAD_GRAYSCALE)

# Cria variavel do tipo struct (similar ao matlab):

Filter = nf.structtype()

Filter.img = np.array(img)

Filter.imgSize = nf.structtype()
Filter.imgSize.lin, Filter.imgSize.col = Filter.img.shape

Hist = nf.calcHist(Filter.img)

#############################################################################################
########## Plot images:

########## Using matplotlib #################
plt.figure(1)
#plt.subplot(121)
plt.imshow(img, 'gray')
plt.title('Imagem Original')

#plt.subplot(122)
plt.figure(2)
plt.stem(Hist)
Пример #9
0
def filterPrewit(Filter):
    ### Imports
    import numpy as np
    import matplotlib.pyplot as plt
    import math as m
    import navFunc as nf

    # Load image into numpy matrix

    A = Filter.img

    size = nf.structtype()
    size.A = nf.structtype()
    size.A.lin, size.A.col = A.shape

    #################### Prewit filter
    ## Pre-set steps:
    ### Generate two kernersl (horizontal and vertical)
    Filter.kernel = nf.structtype()
    Filter.kernel.horz = np.zeros((Filter.kernelSize, Filter.kernelSize))
    Filter.kernel.horz[:, 0] = -1
    Filter.kernel.horz[:, (Filter.kernelSize - 1)] = 1

    Filter.kernel.vert = np.zeros((Filter.kernelSize, Filter.kernelSize))
    Filter.kernel.vert[0, :] = -1
    Filter.kernel.vert[(Filter.kernelSize - 1), :] = 1

    #################
    central = m.floor((Filter.kernelSize / 2))

    C = np.zeros((size.A.lin + central * 2, size.A.col + central * 2))
    C[(0 + central):(size.A.lin + central),
      (0 + central):(size.A.col + central)] = A

    #################
    ##  Run the kernel over the matrix (similar to convolution):
    #################
    somaHorz = 0
    somaVert = 0
    D = np.zeros(A.shape)

    for j in range((0), size.A.lin):
        for k in range((0), size.A.col):
            # Run kernel in one matrix's elements
            for kl in range(0, Filter.kernelSize):
                for kk in range(0, Filter.kernelSize):

                    somaHorz = (C[j + kl, k + kk] *
                                Filter.kernel.horz[kl, kk]) + somaHorz
                    somaVert = (C[j + kl, k + kk] *
                                Filter.kernel.vert[kl, kk]) + somaVert

            Ph = m.ceil((somaHorz / (Filter.kernelSize**2)))
            Pv = m.ceil((somaVert / (Filter.kernelSize**2)))
            somaHorz = 0
            somaVert = 0
            D[j, k] = np.sqrt(Ph**2 + Pv**2)
            # print('LINE has finished')

    D = np.uint8(D)

    print('################################')
    print('Process finished')
    print('Filter have been applied')
    print('################################')

    return D
Пример #10
0
def multiLimiar(Filter):
    ### Imports
    import numpy as np
    import matplotlib.pyplot as plt
    import math as m
    import navFunc as nf

    # Load image into numpy matrix

    A = Filter.img

    size = nf.structtype()
    size.A = nf.structtype()
    size.A.lin, size.A.col = A.shape

    if Filter.multiLimiar.size == 2:
        T2 = Filter.multiLimiar[1]
        T1 = Filter.multiLimiar[0]
        Gmin = 0
        Gmed = 127
        Gmax = 255

    if Filter.multiLimiar.size == 3:
        T3 = Filter.multiLimiar[2]
        T2 = Filter.multiLimiar[1]
        T1 = Filter.multiLimiar[0]
        Gmin = 0
        Gmed1 = Filter.multiRange[0]
        Gmed2 = Filter.multiRange[1]
        Gmax = 255
    #################### Limiar

    D = np.zeros(A.shape)

    for j in range((0), size.A.lin):
        for k in range((0), size.A.col):
            if Filter.multiLimiar.size == 3:
                if A[j, k] > T3:
                    D[j, k] = Gmax
                elif A[j, k] <= T3 and A[j, k] > T2:
                    D[j, k] = Gmed2
                elif A[j, k] <= T2 and A[j, k] > T1:
                    D[j, k] = Gmed1
                elif A[j, k] <= T1:
                    D[j, k] = Gmin

            elif Filter.multiLimiar.size == 2:
                if A[j, k] > T2:
                    D[j, k] = Gmax
                elif A[j, k] <= T2 and A[j, k] > T1:
                    D[j, k] = Gmed
                elif A[j, k] <= T1:
                    D[j, k] = Gmin

    D = np.uint8(D)

    print('################################')
    print('Process finished')
    print('Multilimiar have been applied')
    print('################################')

    return D