示例#1
0
def detect_Hough(data):
    image = data.copy()
    edges = canny(image, sigma=10, low_threshold=60, high_threshold=90)

    # Detect circles between 80% and 100% of image semi-diagonal
    lx, ly = data.shape
    sizex, sizey = lx/2., ly/2.
    max_r = numpy.sqrt(sizex**2 + sizey**2) 
    hough_radii = numpy.linspace(0.5*max_r, 0.9 * max_r, 20)
    hough_res = hough_circle(edges, hough_radii)


    centers = []
    accums = []
    radii = []
    for radius, h in zip(hough_radii, hough_res):
        # For each radius, extract two circles
        num_peaks = 2
        peaks = peak_local_max(h, num_peaks=num_peaks)
        centers.extend(peaks)
        accums.extend(h[peaks[:, 0], peaks[:, 1]])
        radii.extend([radius] * num_peaks)

    # Use the most prominent circle
    idx = numpy.argsort(accums)[::-1][:1]
    center_x, center_y = centers[idx]
    radius = radii[idx]
    return center_x, center_y, radius
def generate_sp_and_bd_seg(dataset, INPUT_SIZE):
    # Set image paths
    image_path = 'images_orig/'
    save_path_sp = 'sp_seg_test/'
    save_path_bd = 'bd_seg_test/'
    img_names = []
    # Load image names from txt files
    if dataset == 'horsecoarse':
        with open('../../lst/' + dataset + '_train.txt', 'r') as f:
            img_names.extend([line.strip() for line in f])
        with open('../../lst/' + dataset + '_test.txt', 'r') as f:
            img_names.extend([line.strip() for line in f])
    # Generate and save superpixels and boundaries
    for name in img_names:
        '''
        # Superpixels
        img_org = Image.open(image_path+name+'.jpg')
        img = np.array(img_org.resize((INPUT_SIZE, INPUT_SIZE)))
        labels = segmentation.slic(img, compactness = 40, n_segments = 600)
        np.save(save_path_sp+name+"_sp.npy", labels)
        '''
        # Boundaries
        data = np.load("sp_seg/" + name + "_sp.npy")
        num_segments = max(np.unique(data))
        # Take care of 0th superpixel
        bd_dict = {}
        labeled = data.copy()
        labeled[labeled != 0] = 1
        labeled = 1 - labeled
        ind = zip(*np.where(
            find_boundaries(labeled, mode="inner").astype(np.uint8) == 1))
        bd_dict[str(0)] = [str(t) for t in ind]
        for i in range(1, num_segments + 1):
            labeled = data.copy()
            labeled[labeled != i] = 0
            ind = zip(*np.where(
                find_boundaries(labeled, mode="inner").astype(np.uint8) == 1))
            bd_dict[str(i)] = [str(t) for t in ind]
        with open(save_path_bd + name + "_bd.json", "w") as f:
            json.dump(bd_dict, f)
示例#3
0
def parallel_check(coords,data,checkpoint,para,exception,przypadek):
    print("parallel_check")
    offset=60
    print(coords[1][1])
    print(coords[3][1])
    print(coords[0][0])
    print(coords[2][0])
    rotated=False
    if coords[3][0]+offset>coords[1][0]>coords[3][0]-offset or coords[0][1]+offset>coords[2][1]>coords[0][1]-offset:
        data = rotate(data, 5)
        checkpoint, contours = background_removal(data.copy())
        checkpoint[1] = erosion_loop(checkpoint[1], 5)
        coords, przypadek,para,exception = kontury_debug(checkpoint[1])
        rotated = True
    return coords, przypadek, data,checkpoint,rotated,para,exception
def conservative_smoothing_gray(data, filter_size):
    temp = []
    indexer = filter_size // 2
    new_image = data.copy()
    nrow, ncol = data.shape[0:2]
    for i in range(nrow):
        for j in range(ncol):
            for k in range(i - indexer, i + indexer + 1):
                for m in range(j - indexer, j + indexer + 1):
                    if (k > -1) and (k < nrow):
                        if (m > -1) and (m < ncol):
                            temp.append(data[k, m])

            temp.remove(data[i, j])
            max_value = max(temp)
            min_value = min(temp)
            if data[i, j] > max_value:
                new_image[i, j] = max_value
            elif data[i, j] < min_value:
                new_image[i, j] = min_value
            temp = []
    return new_image.copy()
示例#5
0
def zwroc_pokrojone(data, checkpoint):
    data_org = data.copy()
    coords, przypadek,para,exception = kontury_debug(checkpoint[1])
    coords, przypadek, data, checkpoint, rotated,para,exception = parallel_check(coords, data, checkpoint,para,exception,przypadek)
    warp = 0
    dst= 0
    if przypadek == 0:
        warp, dst = transform_if_rectangle(data, coords.copy())
    if przypadek == 1:
        warp, dst = transform_if_not_rect(data, coords.copy())

    tile_img, town_img, road_img, tile_coords, town_coords, road_coords = krojonko(warp, checkpoint)



    sheep, forest, clay, mountains, robber, wheat = the_great_tile_finder(tile_img)
    domki = the_great_domki_finder(town_img)
    print("DEBUG")
    print(sheep)
    print(forest)
    print(clay)
    print(mountains)
    print(robber)
    print(wheat)
    print(domki)
    print("DEBUG")



    # img = data.copy()
    #     # for i in range(len(img)):
    #     #     for j in range(len(img[0])):
    #     #         img[i][j]=[0,0,0]
    #     # img=koloruj_piksel(img,sheep,[1,0,0],tile_coords)
    #     # timestr = time.strftime("%H-%M-%S")
    #     # io.imsave('debug-' + timestr + '.png', img)

    # warp = tf.warp(img, tform3, output_shape=(len(img), len(img[0])))
    # sheep, forest, clay, mountains, robber, wheat
    # checkpoint.append(warp.copy())
    warp = koloruj_tile(warp, sheep, [0, 1, 0], tile_coords)
    # checkpoint.append(warp.copy())
    warp = koloruj_tile(warp, forest, [0, 1, 1], tile_coords)
    # checkpoint.append(warp.copy())
    warp = koloruj_tile(warp, clay, [1, 0, 0], tile_coords)
    # checkpoint.append(warp.copy())
    warp = koloruj_tile(warp, mountains, [0.1, 0.1, 0.1], tile_coords)
    # checkpoint.append(warp.copy())
    warp = koloruj_tile(warp, robber, [1, 1, 0], tile_coords)
    # checkpoint.append(warp.copy())
    warp = koloruj_tile(warp, wheat, [1, 0, 1], tile_coords)
    # checkpoint.append(warp.copy())
    warp = koloruj_town(warp,domki,[1,1,1],town_coords)
    warp = reverse_warp(warp, checkpoint, coords, dst)
    if rotated:
        warp = rotate(warp,-5)
    warp = wypelnij(warp,data_org)
    # timestr = time.strftime("%H-%M-%S")
    # io.imsave('wynik-' + file_string + '-checkpoint-' + str(i) + '-' + timestr + '-warp.png', v)
    # checkpoint.append(warp.copy())
    ploty = wyswietl(checkpoint, nazwapliku)
    ploty[1].plot(coords[:, 1], coords[:, 0], "+r", markersize=15)
    ploty[2].plot(town_coords[:, 1], town_coords[:, 0], "+r", markersize=15)
    return warp, tile_img, town_img
示例#6
0
    ploty[2].plot(town_coords[:, 1], town_coords[:, 0], "+r", markersize=15)
    return warp, tile_img, town_img


if __name__ == '__main__':

    start_time = time.time()
    # for file in range(21, 30):
    for file in [21,22]:
        # for file in range(31, 43):
        nazwapliku = str(file) + ".jpg"
        print(nazwapliku)
        data = io.imread(nazwapliku)
        data = img_as_float(data)

        checkpoint, contours = background_removal(data.copy())

        checkpoint[1] = erosion_loop(checkpoint[1], 5)

        warp, tile_img,town_img = zwroc_pokrojone(data, checkpoint)

        timestr = time.strftime("%H-%M-%S")
        file_string = str(file)
        if file < 10:
           file_string = '0' + file_string
        io.imsave('wynik-' + file_string + '-checkpoint-' + timestr + '-warp.png', warp)
        #io.imsave('wynik-' + file_string + '-' + timestr + '-warp.png', warp)
        #savefig('wynik-' + file_string + '-' + timestr + '.png')
        #for i, v in enumerate(tile_img):
        #    io.imsave('wynik-' + file_string + '-tile-' + str(i) + '-' + timestr + '-warp.png', v)
        # for i, v in enumerate(checkpoint):
示例#7
0
from scipy import misc

data = misc.imread('cat.jpeg')

print type(data)
print data.shape
print data.dtype


def rgb2gray(rgb):
    r, g, b = rgb[:, :, 0], rgb[:, :, 1], rgb[:, :, 2]
    gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
    return gray


only_red_value = data.copy()
only_green_value = data.copy()
only_blue_value = data.copy()
only_red_value[:, :, 1:] = [0, 0]
only_green_value[:, :, (0, 2)] = [0, 0]
only_blue_value[:, :, :2] = [0, 0]
gray_scale = data.copy()
gray_scale = rgb2gray(gray_scale)
f, axarr = plt.subplots(3, 2)

print(
    "particular point(175,60) at main {} , only red {}, only green {}, only blue {}"
    .format(data[175, 60, :], only_red_value[175, 60, :],
            only_green_value[175, 60, :], only_blue_value[175, 60, :]))
axarr[0, 0].imshow(data)
axarr[0, 1].imshow(gray_scale, cmap=cm.gray)
def crimmins(data):
    new_image = data.copy()
    nrow = len(data)
    ncol = len(data[0])

    # Dark pixel adjustment

    # First Step
    # N-S
    for i in range(1, nrow):
        for j in range(ncol):
            if data[i - 1, j] >= (data[i, j] + 2):
                new_image[i, j] += 1
    data = new_image
    # E-W
    for i in range(nrow):
        for j in range(ncol - 1):
            if data[i, j + 1] >= (data[i, j] + 2):
                new_image[i, j] += 1
    data = new_image
    # NW-SE
    for i in range(1, nrow):
        for j in range(1, ncol):
            if data[i - 1, j - 1] >= (data[i, j] + 2):
                new_image[i, j] += 1
    data = new_image
    #NE-SW
    for i in range(1, nrow):
        for j in range(ncol - 1):
            if data[i - 1, j + 1] >= (data[i, j] + 2):
                new_image[i, j] += 1
    data = new_image
    # Second Step
    # N-S
    for i in range(1, nrow - 1):
        for j in range(ncol):
            if (data[i - 1, j] > data[i, j]) and (data[i, j] <= data[i + 1,
                                                                     j]):
                new_image[i, j] += 1
    data = new_image
    # E-W
    for i in range(nrow):
        for j in range(1, ncol - 1):
            if (data[i, j + 1] > data[i, j]) and (data[i, j] <= data[i,
                                                                     j - 1]):
                new_image[i, j] += 1
    data = new_image
    # NW-SE
    for i in range(1, nrow - 1):
        for j in range(1, ncol - 1):
            if (data[i - 1, j - 1] > data[i, j]) and (data[i, j] <=
                                                      data[i + 1, j + 1]):
                new_image[i, j] += 1
    data = new_image
    # NE-SW
    for i in range(1, nrow - 1):
        for j in range(1, ncol - 1):
            if (data[i - 1, j + 1] > data[i, j]) and (data[i, j] <=
                                                      data[i + 1, j - 1]):
                new_image[i, j] += 1
    data = new_image
    #Third Step
    # N-S
    for i in range(1, nrow - 1):
        for j in range(ncol):
            if (data[i + 1, j] > data[i, j]) and (data[i, j] <= data[i - 1,
                                                                     j]):
                new_image[i, j] += 1
    data = new_image
    # E-W
    for i in range(nrow):
        for j in range(1, ncol - 1):
            if (data[i, j - 1] > data[i, j]) and (data[i, j] <= data[i,
                                                                     j + 1]):
                new_image[i, j] += 1
    data = new_image
    # NW-SE
    for i in range(1, nrow - 1):
        for j in range(1, ncol - 1):
            if (data[i + 1, j + 1] > data[i, j]) and (data[i, j] <=
                                                      data[i - 1, j - 1]):
                new_image[i, j] += 1
    data = new_image
    # NE-SW
    for i in range(1, nrow - 1):
        for j in range(1, ncol - 1):
            if (data[i + 1, j - 1] > data[i, j]) and (data[i, j] <=
                                                      data[i - 1, j + 1]):
                new_image[i, j] += 1
    data = new_image
    # Fourth Step
    # N-S
    for i in range(nrow - 1):
        for j in range(ncol):
            if (data[i + 1, j] >= (data[i, j] + 2)):
                new_image[i, j] += 1
    data = new_image
    # E-W
    for i in range(nrow):
        for j in range(1, ncol):
            if (data[i, j - 1] >= (data[i, j] + 2)):
                new_image[i, j] += 1
    data = new_image
    # NW-SE
    for i in range(nrow - 1):
        for j in range(ncol - 1):
            if (data[i + 1, j + 1] >= (data[i, j] + 2)):
                new_image[i, j] += 1
    data = new_image
    # NE-SW
    for i in range(nrow - 1):
        for j in range(1, ncol):
            if (data[i + 1, j - 1] >= (data[i, j] + 2)):
                new_image[i, j] += 1
    data = new_image

    # Light pixel adjustment

    # First Step
    # N-S
    for i in range(1, nrow):
        for j in range(ncol):
            if (data[i - 1, j] <= (data[i, j] - 2)):
                new_image[i, j] -= 1
    data = new_image
    # E-W
    for i in range(nrow):
        for j in range(ncol - 1):
            if (data[i, j + 1] <= (data[i, j] - 2)):
                new_image[i, j] -= 1
    data = new_image
    # NW-SE
    for i in range(1, nrow):
        for j in range(1, ncol):
            if (data[i - 1, j - 1] <= (data[i, j] - 2)):
                new_image[i, j] -= 1
    data = new_image
    # NE-SW
    for i in range(1, nrow):
        for j in range(ncol - 1):
            if (data[i - 1, j + 1] <= (data[i, j] - 2)):
                new_image[i, j] -= 1
    data = new_image
    # Second Step
    # N-S
    for i in range(1, nrow - 1):
        for j in range(ncol):
            if (data[i - 1, j] < data[i, j]) and (data[i, j] >= data[i + 1,
                                                                     j]):
                new_image[i, j] -= 1
    data = new_image
    # E-W
    for i in range(nrow):
        for j in range(1, ncol - 1):
            if (data[i, j + 1] < data[i, j]) and (data[i, j] >= data[i,
                                                                     j - 1]):
                new_image[i, j] -= 1
    data = new_image
    # NW-SE
    for i in range(1, nrow - 1):
        for j in range(1, ncol - 1):
            if (data[i - 1, j - 1] < data[i, j]) and (data[i, j] >=
                                                      data[i + 1, j + 1]):
                new_image[i, j] -= 1
    data = new_image
    # NE-SW
    for i in range(1, nrow - 1):
        for j in range(1, ncol - 1):
            if (data[i - 1, j + 1] < data[i, j]) and (data[i, j] >=
                                                      data[i + 1, j - 1]):
                new_image[i, j] -= 1
    data = new_image
    # Third Step
    # N-S
    for i in range(1, nrow - 1):
        for j in range(ncol):
            if (data[i + 1, j] < data[i, j]) and (data[i, j] >= data[i - 1,
                                                                     j]):
                new_image[i, j] -= 1
    data = new_image
    # E-W
    for i in range(nrow):
        for j in range(1, ncol - 1):
            if (data[i, j - 1] < data[i, j]) and (data[i, j] >= data[i,
                                                                     j + 1]):
                new_image[i, j] -= 1
    data = new_image
    # NW-SE
    for i in range(1, nrow - 1):
        for j in range(1, ncol - 1):
            if (data[i + 1, j + 1] < data[i, j]) and (data[i, j] >=
                                                      data[i - 1, j - 1]):
                new_image[i, j] -= 1
    data = new_image
    # NE-SW
    for i in range(1, nrow - 1):
        for j in range(1, ncol - 1):
            if (data[i + 1, j - 1] < data[i, j]) and (data[i, j] >=
                                                      data[i - 1, j + 1]):
                new_image[i, j] -= 1
    data = new_image
    # Fourth Step
    # N-S
    for i in range(nrow - 1):
        for j in range(ncol):
            if (data[i + 1, j] <= (data[i, j] - 2)):
                new_image[i, j] -= 1
    data = new_image
    # E-W
    for i in range(nrow):
        for j in range(1, ncol):
            if (data[i, j - 1] <= (data[i, j] - 2)):
                new_image[i, j] -= 1
    data = new_image
    # NW-SE
    for i in range(nrow - 1):
        for j in range(ncol - 1):
            if (data[i + 1, j + 1] <= (data[i, j] - 2)):
                new_image[i, j] -= 1
    data = new_image
    # NE-SW
    for i in range(nrow - 1):
        for j in range(1, ncol):
            if (data[i + 1, j - 1] <= (data[i, j] - 2)):
                new_image[i, j] -= 1
    data = new_image
    return new_image.copy()