def first_the_first_level_rect(crop_length, x_box_length, y_box_length): """ :param crop_length: :param x_box_length: :param y_box_length: :return: the min block top left point index from the ORIGINAL image """ off_set_y = 200 off_set_x = 240 rect_firt = [] crop_length #x_box_start = 200 x_box_length #y_box_start = 200 y_box_length mean = np.zeros(((crop_length - x_box_length)/10, (crop_length - y_box_length)/10)) index_min_mean = np.zeros((14, 2)) real_index_min_mean = np.zeros((14, 2)) for picture in range(14): source = 'Data\Radiographs\%02d.tif' % (picture + 1) raw_img = cv2.imread(source, 0) cropped_img = crop(raw_img, 1000, 500, 1000, 1000) img = median_filter(cropped_img) img = bilateral_filter(img) img = top_hat_transform(img) img = bottom_hat_transform(img) img = sobel(img) for i in range(0, np.shape(img)[0] - x_box_length, 10):# x range search for j in range(0, np.shape(img)[1] - y_box_length, 10):# y range search img_tmp = img[j: (j + y_box_length), i:(i + x_box_length)] mean_tmp = float(np.mean(img_tmp)) mean[i/10, j/10] = mean_tmp index_min_mean[picture] = np.where(mean == np.amin(mean, axis = (0,1))) real_index_min_mean[picture][0] = index_min_mean[picture][0] + off_set_x real_index_min_mean[picture][1] = index_min_mean[picture][1] + off_set_y rect_tmp_for_show = img[int(real_index_min_mean[picture][1]): int(real_index_min_mean[picture][1] + y_box_length), int(real_index_min_mean[picture][0]):int((real_index_min_mean[picture][0] + x_box_length))] rect_firt.append((img[int(real_index_min_mean[picture][1]): int(real_index_min_mean[picture][1] + y_box_length), int(real_index_min_mean[picture][0]):int((real_index_min_mean[picture][0] + x_box_length))])) # cv2.imshow('min_mean area', rect_tmp_for_show) #cv2.waitKey(500) cv2.imwrite('Data\Configure\init_guess_image-%d.tif' % picture, rect_tmp_for_show) return rect_firt, real_index_min_mean
lm = Landmarks(source).show_points() # print lm # you can print it to check differences. """Initial position guess""" ini_pos = np.array([[570, 360, 390], [620, 470, 390], [640, 570, 370], [570, 670, 370], [640, 400, 670], [630, 480, 670], [620, 570, 630], [640, 650, 610]]) # ini_pos = np.array([[570, 360, 390], [570, 470, 390], [570, 570, 370], [570, 670, 370], [570, 400, 670], # [470, 500, 680], [470, 590, 630], [470, 650, 610]]) s = ini_pos[i, 0] t = [ini_pos[i, 1], ini_pos[i, 2]] Golden_lm = load_training_data(Nr_incisor) Golden_lm = rescale_withoutangle(gpa(Golden_lm)[2], t, s) # Y img = cv2.imread('Data/Radiographs/01.tif', 0) init_guess_img = img.copy() crop_img_ori = crop(img, 1000, 500, 1000, 1000) crop_img_init_guess = crop(init_guess_img, 1000, 500, 1000, 1000) crop_correct_lm = crop(init_guess_img, 1000, 500, 1000, 1000) #=======without crop # crop_img_ori = img # crop_img_init_guess = init_guess_img # crop_correct_lm = init_guess_img """Drawing initial guess""" #cv2.imshow('first golden model', drawlines(crop_img_init_guess, Golden_lm)) cv2.imwrite('Data\Configure\init_guess_incisor-%d.tif' % Nr_incisor, drawlines(crop_img_init_guess, Golden_lm)) cv2.imwrite('Data\Configure\correct_lm_incisor-%d.tif' % Nr_incisor, drawlines(crop_correct_lm, lm)) #cv2.waitKey(0)
import numpy as np import cv2 from Figure_denoise import crop from pre_process import Landmarks if __name__ == '__main__': img_raw = cv2.imread('Data/Radiographs/01.tif', 0) print(np.shape(img_raw)) crop_img_ori = crop(img_raw, 1000, 500, 1000, 1000) # (y, x, xx, yy) #cv2.imshow('cropped', crop_img_ori) # cv2.waitKey(0) mask = np.zeros((1000, 1000), dtype='uint8') for incisor in range(8): Nr_incisor = incisor + 1 source = 'Data\Landmarks\c_landmarks\landmarks1-%d.txt' % Nr_incisor lm = Landmarks(source).show_points() # print(lm) for i in range(np.shape(lm)[0]): lm[i, 0] = int(lm[i, 0] - 1000) lm[i, 1] = int(lm[i, 1] - 500) # print lm[i, 0] # print lm[i, 1] for i in range(np.shape(lm)[0]): mask[int(lm[i, 1]), int(lm[i, 0])] = 1 # for i in range(1000):# x # for j in range(1000): # y # if i < lm[] for i in range(np.shape(lm)[0] - 1): mask = cv2.line(mask, (int(lm[i, 0]), int(lm[i, 1])), (int(lm[(i + 1), 0]), int(lm[(i + 1), 1])),
return Landmarks(np.mean(mat, axis=0)) #def evaluation(X, Goldenlm) if __name__ == '__main__': Nr_incisor = 1 s = 500 t = [1370, 890] Golden_lm = load_training_data( Nr_incisor ) # the function in util refers to the file which only contains 02-14tif. Golden_lm = rescale_withoutangle(gpa(Golden_lm)[2], t, s) lm_objects = load_training_data(Nr_incisor) landmarks_pca = PCA.ASM(lm_objects) #print(np.shape(landmarks_pca.mu_value)) landmarks_pca_value = rescale_withoutangle(landmarks_pca.mu_value, t, s) img = cv2.imread('Data/Radiographs/01.tif', 0) img = img.copy() img_withlm = drawlines(img, landmarks_pca_value) crop_img = crop(img_withlm, 1000, 500, 1000, 1000) img = cv2.resize(crop_img, (0, 0), fx=0.5, fy=0.5) cv2.imshow('cropped_raw', crop_img) #sobel = sobel(crop_img) #cv2.imshow('sobel', sobel) #median = median_filter(crop_img) #cv2.imshow('median', crop_img) cv2.waitKey(0)
x_02 = np.shape(14) x_03 = np.shape(14) y_0 = np.shape(14) y_1 = np.shape(14) print np.shape(real_start_point) # since here it is right final_middle_point = np.zeros((14, 2)) """This is the final result of middle points""" for picture in range(14): final_middle_point[picture] = [real_start_point[picture, 0] + 220, real_start_point[picture, 1] + 100] for picture in range(14): source = 'Data\Radiographs\%02d.tif' % (picture + 1) raw_img = cv2.imread(source, 0) cropped_img = crop(raw_img, 1000, 500, 1000, 1000) img = median_filter(cropped_img) img = bilateral_filter(img) img = top_hat_transform(img) img = bottom_hat_transform(img) img = sobel(img) #cv2.circle(img, (int(final_middle_point[picture, 0]), int(final_middle_point[picture, 1])), 10, (255, 0, 0), 1) #cv2.imshow('center circle', img) #cv2.waitKey(500) #cv2.imwrite('Data\Configure\init_guess_center_point-%d.tif' % picture, img) x_length_top = 400 x_length_bot = 300 y_length = 800 for i in range(14): x_00 = int(final_middle_point[i, 0] - (x_length_top/10)*4)