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)
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()
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
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):
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()