Example #1
0
YFilterSize = Statistics.RoundToOdd(len(img) / 20)
XFilterSize = Statistics.RoundToOdd(len(img[0]) / 20)

SmoothSize = Statistics.RoundToEven(len(img) / 20)

print "smooth size", SmoothSize

# use the recomended standard deviation
blur = cv2.GaussianBlur(img, (XFilterSize, YFilterSize), 0)
fig, ((ax1, ax2), (ax3, ax4), (ax5, ax6)) = plt.subplots(3,
                                                         2,
                                                         sharex=False,
                                                         sharey=False)

BlurredImageArray = Array.VerticalArrayFromImage(Image.fromarray(blur),
                                                 BandPercentage=.5)
MeanArray = Array.MeanArray(BlurredImageArray, SmoothSize)
MedianArray = Array.MedianArray(BlurredImageArray, SmoothSize)
MeanMedianArray = Array.MedianArray(MeanArray, SmoothSize)

ax1.plot(MeanMedianArray)
ax1.set_title("Blurred then Mean then Median")
ax2.plot(BlurredImageArray)
ax2.set_title("Blurred")
ax3.plot(MeanArray)
ax3.set_title("Blurred and Mean")
ax4.plot(Array.VerticalArrayFromImage(Image.fromarray(img), BandPercentage=.5))
ax4.set_title("unprocessed")
ax5.plot(MedianArray)
ax5.set_title("Blurred then Median")
plt.show()
Example #2
0
# get the line height
LineHeight = 0
with open('SharedData/LineHeight.txt', 'r') as content_file:
    LineHeight = int(float(content_file.read()))

# use the line height, and make the smoothing size 1/2 of that
SmoothSize = Statistics.RoundToEven(LineHeight / 2.0)
print "smooth size", SmoothSize

# use the recomended standard deviation
blur = cv2.GaussianBlur(img, (XFilterSize, XFilterSize), 0)

BlurredImageArray = Array.HorizontalArrayFromImage(Image.fromarray(blur))
RegularImageArray = Array.HorizontalArrayFromImage(Image.fromarray(img))

MeanArray = Array.MeanArray(RegularImageArray, SmoothSize)
MeanArrayBlurred = Array.MeanArray(BlurredImageArray, SmoothSize)

fig, ((ax1, ax2)) = plt.subplots(2, 1, sharex=False, sharey=False)

# LocalMaxes = sorted(Array.FindAllLocalMaxes(BlurredImageArray) + Array.FindAllLocalMins(BlurredImageArray))
LocalMaxes = Array.FindAllLocalMaxes(BlurredImageArray)

# sets how different maximums from the 'same' point can be
# this may be incorrect and will F**K us
NewMinimumThreshold = 5

# make sure that clusters of data are treated as one individual point
FilteredLocalMaxes = []
# add the first point because it automatically counts
FilteredLocalMaxes.append(LocalMaxes[0])
def CalculateCropPoints(LineHeight, ShowGraphs=False):
    global FileName

    # do the gaussian smoothing that enables us to find the crop points
    # blur the image
    img = cv2.imread("Processed/" + FileName)

    # compute the raw array
    RawArray = Array.VerticalArrayFromImage(Image.fromarray(img))

    # calculate filter and smooth sizes based on how big the image is
    YFilterSize = Statistics.RoundToOdd(len(img) / 20)
    XFilterSize = Statistics.RoundToOdd(len(img[0]) / 20)
    SmoothSize = Statistics.RoundToEven(len(img) / 20)

    # use the line height, and make the smoothing size 1/2 of that
    SmoothSize = Statistics.RoundToEven(LineHeight / 2.0)

    # use the recomended standard deviation
    blur = cv2.GaussianBlur(img, (XFilterSize, YFilterSize), 0)

    BlurredImageArray = Array.VerticalArrayFromImage(Image.fromarray(blur),
                                                     BandPercentage=.5)
    MeanArray = Array.MeanArray(BlurredImageArray, SmoothSize)
    MedianArray = Array.MedianArray(BlurredImageArray, SmoothSize)

    # get the crop points by finding local maxes
    CropPoints = Array.FindAllLocalMaxes(MeanArray)

    # check to see if there should be any extra crop points added
    SlopeArray = Array.FindSlope(MeanArray)
    # if the initial slope is less than 0
    if SlopeArray[0] < 0:
        # insert 0 at position 0
        CropPoints.insert(0, 0)
    # if the final slope is more than 0 or 0
    if SlopeArray[len(SlopeArray) - 1] >= 0:
        CropPoints.append(len(MeanArray) - 1)

    if ShowGraphs:
        # graph / visualize some stuff
        TempArray = []
        for i in range(0, len(MeanArray)):
            if i in CropPoints:
                TempArray.append(255)
            else:
                TempArray.append(150)

        fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2,
                                                     2,
                                                     sharex=False,
                                                     sharey=False)
        ax1.set_title("Blurred then Mean")
        ax1.plot(MeanArray)
        ax1.plot(RawArray)
        ax2.plot(BlurredImageArray)
        ax2.plot(RawArray)
        ax2.set_title("Blurred")
        ax3.imshow(img)
        ax3.set_title("Image")
        ax4.imshow(blur)
        ax4.set_title("Blur Image")
        plt.show()

    return CropPoints