def exp(): image_dir = r"../images/medical_image_sets/DRIVE/images" mask_dir = r"../images/medical_image_sets/DRIVE/mask" out_dir = r"./temp_out/" [os.remove(path) for path in glob.glob(out_dir + "/*")] image_names = glob.glob(image_dir + "/*") gamma_list = [] image_path_list = [] for k, path in enumerate(image_names): # Step 1. read images mask_path = os.path.join(mask_dir, path.split(os.sep)[-1]) img = cv2.imread(path) mask = cv2.imread(mask_path, 0) if img is None or img.shape[ 2] == 4: # something wrong to read an image, or BGRA image, or other files print("Warning: path (" + path + ") is not valid, we will skip this path...") continue _, mask = cv2.threshold(mask, 254, 255, cv2.THRESH_BINARY) # Step 2. conduct gamma estimation and image restoration with different methods or config _, img_cab = correct_average_brightness(img, mask=mask) # CAB _, img_cab_agt = adaptive_gamma_transform(img, mask=mask, visual=False) # AGT gamma, img_cab_agt_visual = adaptive_gamma_transform( img, mask=mask, visual=True) # AGT-ME-VISUAL _, img_bigc = blind_inverse_gamma_correction(img, "fast", True) # BIGC # Step 3. save the images width = img.shape[0] # 196 for paper eps file # names = ["ORIGINAL", "BIGC", "CAB", "AGT-ME", "AGT-ME-VISUAL"] names = ["ORIGINAL", "BIGC", "CAB", "AGT-ME"] images = [img, img_bigc, img_cab, img_cab_agt, img_cab_agt_visual] all_imgs = None for name, image in zip(names, images): temp_img = cv2.resize(image, (0, 0), fx=width / image.shape[1], fy=width / image.shape[1]) # temp_img = cv2.putText(temp_img, name, (0, 25), cv2.FONT_HERSHEY_COMPLEX, 0.7, (255, 0, 0), 1) temp_img = cv2.putText(temp_img, name, (0, 50), cv2.FONT_HERSHEY_DUPLEX, 2.0, (255, 0, 0), 2) if all_imgs is None: all_imgs = temp_img.copy() else: all_imgs = np.concatenate( [all_imgs, 255 + np.zeros([all_imgs.shape[0], 11, 3])], axis=1) all_imgs = np.concatenate([all_imgs, temp_img], axis=1) all_imgs = all_imgs.astype(np.uint8) cv2.imwrite( os.path.join(out_dir, path.split(os.sep)[-1][:-4] + ".png"), all_imgs) os.system("nautilus " + out_dir)
def exp(): image_dir = r"../images/medical_image_sets/CT" out_dir = r"./temp_out" [os.remove(path) for path in glob.glob(out_dir + "/*")] image_names = glob.glob(image_dir + "/*") for k, img_path in enumerate(image_names): print("processing " + img_path + "...") # Step 1. read CT images with pydicom package dcm = pydicom.read_file(img_path) dcm.image = dcm.pixel_array * dcm.RescaleSlope + dcm.RescaleIntercept img_raw = dcm.image.copy() if img_raw is None: # something wrong to read an image, or BGRA image print("Warning: path (" + img_path + ") is not valid, we will skip this path...") continue # Step 2. Get the mask with a simple threshold strategy and normalize it to 0-1 mask_threshold = -150 mask = ((img_raw > mask_threshold) * 255).astype(np.uint8) img = 255 * (img_raw - mask_threshold) / (np.max(img_raw[:]) - mask_threshold) img[img < 0] = 0 img = img.round().astype(np.uint8) # Step 2. conduct gamma estimation and image restoration with different methods or config _, img_cab = correct_average_brightness(img, mask=mask) # CAB _, img_cab_agt = adaptive_gamma_transform(img, mask=mask, visual=False) # AGT gamma, img_cab_agt_visual = adaptive_gamma_transform(img, mask=mask, visual=True) # AGT-ME-VISUAL _, img_bigc = blind_inverse_gamma_correction(img, "fast", True) # BIGC img_bigc[mask < 255] = 0 # Step 3. save the images width = img.shape[0] # 196 for paper eps file # names = ["ORIGINAL", "BIGC", "CAB", "AGT-ME", "AGT-ME-VISUAL"] names = ["ORIGINAL", "BIGC", "CAB", "AGT-ME"] images = [img, img_bigc, img_cab, img_cab_agt, img_cab_agt_visual] all_imgs = None for name, image in zip(names, images): temp_img = cv2.resize(image, (0, 0), fx=width / image.shape[1], fy=width / image.shape[1]) temp_img = cv2.cvtColor(temp_img, cv2.COLOR_GRAY2BGR) # temp_img = cv2.putText(temp_img, name, (0, 25), cv2.FONT_HERSHEY_COMPLEX, 0.7, (255, 0, 0), 1) temp_img = cv2.putText(temp_img, name, (0, 50), cv2.FONT_HERSHEY_DUPLEX, 1.5, (255, 0, 0), 2) if all_imgs is None: all_imgs = temp_img.copy() else: all_imgs = np.concatenate([all_imgs, 255 + np.zeros([all_imgs.shape[0], 11, 3])], axis=1) all_imgs = np.concatenate([all_imgs, temp_img], axis=1) all_imgs = all_imgs.astype(np.uint8) cv2.imwrite(os.path.join(out_dir, img_path.split(os.sep)[-1] + ".png"), all_imgs) # cv2.imwrite(os.path.join(out_dir, img_path.split(os.sep)[-1] + "mask.png"), mask) os.system("nautilus " + out_dir) print("please check the results in dir:" + out_dir) os.system("nautilus " + out_dir)
def exp(): image_dir = r"../images/medical_image_sets/MRI/" out_dir = r"./temp_out" [os.remove(path) for path in glob.glob(out_dir + "/*")] image_names = glob.glob(image_dir + "/*") for k, img_path in enumerate(image_names): # Step 1. read images img_raw = nib.load(img_path).dataobj[200:675, :, 5] img_raw = cv2.rotate(img_raw, cv2.ROTATE_90_COUNTERCLOCKWISE) mask = (img_raw > 100).astype(np.uint8) * 255 img = (255 * (img_raw - np.min(img_raw[:])) / (np.max(img_raw[:]) - np.min(img_raw[:]))) img = img.round().astype(np.uint8) # Step 2. conduct gamma estimation and image restoration with different methods or config _, img_cab = correct_average_brightness(img, mask=mask) # CAB _, img_cab_agt = adaptive_gamma_transform(img, mask=mask, visual=False) # AGT gamma, img_cab_agt_visual = adaptive_gamma_transform( img, mask=mask, visual=True) # AGT-ME-VISUAL _, img_bigc = blind_inverse_gamma_correction(img, "fast", True) # BIGC img_bigc[mask < 255] = 0 # Step 3. save the images width = img.shape[0] # 196 for paper eps file # names = ["ORIGINAL", "BIGC", "CAB", "AGT-ME", "AGT-ME-VISUAL"] names = ["ORIGINAL", "BIGC", "CAB", "AGT-ME"] images = [img, img_bigc, img_cab, img_cab_agt, img_cab_agt_visual] all_imgs = None for name, image in zip(names, images): temp_img = cv2.resize(image, (0, 0), fx=width / image.shape[1], fy=width / image.shape[1]) temp_img = cv2.cvtColor(temp_img, cv2.COLOR_GRAY2BGR) # temp_img = cv2.putText(temp_img, name, (0, 25), cv2.FONT_HERSHEY_COMPLEX, 0.7, (255, 0, 0), 1) temp_img = cv2.putText(temp_img, name, (0, 70), cv2.FONT_HERSHEY_DUPLEX, 3.0, (255, 0, 0), 3) if all_imgs is None: all_imgs = temp_img.copy() else: all_imgs = np.concatenate( [all_imgs, 255 + np.zeros([all_imgs.shape[0], 11, 3])], axis=1) all_imgs = np.concatenate([all_imgs, temp_img], axis=1) all_imgs = all_imgs.astype(np.uint8) cv2.imwrite( os.path.join(out_dir, img_path.split(os.sep)[-1][:-4] + ".png"), all_imgs) os.system("nautilus " + out_dir)
def exp(): # Step.0 Set the image path image_dir = r"../images/BSD68" file_list = os.listdir(image_dir)[0:10] size_list = [(256, 256), (512, 512), (1024, 1024), (2048, 2048)] agt_time_list = [] cab_time_list = [] bigc_time_list = [] for k, name in enumerate(file_list): print(str(k) + ":" + name) image = cv2.imread(os.path.join(image_dir, name), cv2.IMREAD_GRAYSCALE) if image is None: continue agt_time_list.append([]) cab_time_list.append([]) bigc_time_list.append([]) for siz in size_list: img = cv2.resize(image, siz) # Resize the images start_time = time.time() _, _ = adaptive_gamma_transform(img) end_time = time.time() agt_time_list[-1].append(end_time - start_time) start_time = time.time() _, _ = correct_average_brightness(img) end_time = time.time() cab_time_list[-1].append(end_time - start_time) start_time = time.time() _, _ = blind_inverse_gamma_correction(img) end_time = time.time() bigc_time_list[-1].append(end_time - start_time) agt_time_list = np.array(agt_time_list) cab_time_list = np.array(cab_time_list) bigc_time_list = np.array(bigc_time_list) print("AGT time cost:") print(" mean:" + str(np.mean(agt_time_list, axis=0)) + "(s)") print(" std: " + str(np.std(agt_time_list, axis=0)) + "(s)") print("CAB time cost:") print(" mean:" + str(np.mean(cab_time_list, axis=0)) + "(s)") print(" std: " + str(np.std(cab_time_list, axis=0)) + "(s)") print("BIGC time cost:") print(" mean:" + str(np.mean(bigc_time_list, axis=0)) + "(s)") print(" std: " + str(np.std(bigc_time_list, axis=0)) + "(s)")
def exp(): # Step.0 Set the image dataset dir and a dir to store the results image_dir = r"../images/BSD68/" image_names = os.listdir(image_dir)[:MAX_NUMBER] # Get the file name of the test images out_dir = r"./temp_out" # Step.1 the gamma set definition gamma_set = np.linspace(0.1, 3.0, 30) for gamma in gamma_set: # save the distorted image for fun path = os.path.join(image_dir, image_names[0]) img = cv2.imread(path, -1) distorted_img = gamma_trans(img, gamma) cv2.imwrite(out_dir + os.sep + str(gamma) + ".png", distorted_img) # Step.2 get the estimated gamma with different methods agt_gamma_estimated_list = [] cab_gamma_estimated_list = [] bigc_gamma_estimated_list = [] for gamma in gamma_set: agt_gamma_estimated_list.append([]) cab_gamma_estimated_list.append([]) bigc_gamma_estimated_list.append([]) for k, name in enumerate(image_names): print("gamma:" + str(gamma) + "; number:" + str(k) + ": " + name) path = os.path.join(image_dir, name) img = cv2.imread(path, cv2.IMREAD_GRAYSCALE) # read as gray image # Test with AGT method gamma_origin, _ = adaptive_gamma_transform(img, visual=False) # Estimate the original gamma value distorted_img = gamma_trans(img, gamma) # Add gamma distortion gamma_estimated, _ = adaptive_gamma_transform(distorted_img, visual=False) # distorted gamma value agt_gamma_estimated_list[-1].append(gamma_origin / gamma_estimated) # Test with CAB method gamma_origin, _ = correct_average_brightness(img) # Estimate the original gamma value distorted_img = gamma_trans(img, gamma) # Add gamma distortion gamma_estimated, _ = correct_average_brightness(distorted_img) # distorted gamma value cab_gamma_estimated_list[-1].append(gamma_origin / gamma_estimated) # Test with BIGC method gamma_origin, _ = blind_inverse_gamma_correction(img, visual=False) # Estimate the original gamma value distorted_img = gamma_trans(img, gamma) # Add gamma distortion gamma_estimated, _ = blind_inverse_gamma_correction(distorted_img, visual=False) # distorted gamma value bigc_gamma_estimated_list[-1].append(gamma_origin / gamma_estimated) agt_gamma_estimated_list = np.array(agt_gamma_estimated_list) cab_gamma_estimated_list = np.array(cab_gamma_estimated_list) bigc_gamma_estimated_list = np.array(bigc_gamma_estimated_list) # figure 1. actual gamma VS estimated gamma (AGT method) plt.figure() plt.subplots_adjust(bottom=0.14, left=0.14) plt.grid() gamma_set = np.repeat(gamma_set[:, np.newaxis], agt_gamma_estimated_list.shape[1], axis=1) plt.scatter(gamma_set, agt_gamma_estimated_list, s=20, c='b') plt.xlim([-0.2, 3.2]) plt.ylim([-0.2, 3.2]) plt.xlabel("Gamma bias $\gamma_b$", fontsize=16) plt.ylabel("Recognized gamma $\gamma_r$", fontsize=16) plt.tick_params(labelsize=16) # plt.legend(fontsize=20) foo_fig = plt.gcf() foo_fig.savefig("figs/Fig4a.eps", format='eps', dpi=1200) plt.title("set-estimate") # figure 2. RMSE error curve for different methods rmse_agt = np.sqrt(np.mean((agt_gamma_estimated_list - gamma_set) ** 2, axis=1)) rmse_cab = np.sqrt(np.mean((cab_gamma_estimated_list - gamma_set) ** 2, axis=1)) temp = (bigc_gamma_estimated_list - gamma_set) ** 2 print("Outlier percentage of BIGC:", 100.0 * np.sum(temp[:] > 0.25) / temp.size, "%") temp[temp > 0.5] = np.NaN # special treatment for BIGC outliers rmse_bigc = np.sqrt(np.nanmean(temp, axis=1)) rmse_agt[rmse_agt < 1e-3] = 1e-3 rmse_cab[rmse_cab < 1e-3] = 1e-3 rmse_bigc[rmse_bigc < 1e-3] = 1e-3 print("mean rmse:", np.mean(rmse_agt[:]), "(AGT-ME) and ", np.mean(rmse_cab[:]), "(CAB) and ", np.mean(rmse_bigc[:]), "(BIGC)") # print(rmse_agt, rmse_bigc) plt.figure() plt.grid() plt.subplots_adjust(bottom=0.14, left=0.18) plt.plot(gamma_set[:, 0], rmse_bigc, "r-.", label="BIGC") plt.plot(gamma_set[:, 0], rmse_cab, "r:", label="CAB") plt.plot(gamma_set[:, 0], rmse_agt, "b-", label="AGT-ME") plt.xlim([0.0, 3.0]) plt.ylim([1e-3, 1.0]) plt.semilogy() plt.xlabel("Gamma bias $\gamma_b$", fontsize=16) plt.ylabel("RMSE", fontsize=16) plt.tick_params(labelsize=16) plt.legend(fontsize=16) foo_fig = plt.gcf() foo_fig.savefig("figs/Fig4b.eps", format='eps', dpi=1200) plt.show()
def line_value(image): return image[line_index, 250:850].astype(np.float) # Step.0 path setting image_dir = r"../images/slm image" out_dir = r"./temp_out" [os.remove(path) for path in glob.glob(out_dir + "/*")] # Step.1 read images path = glob.glob(image_dir + "/*")[0] img = cv2.imread(path, cv2.IMREAD_GRAYSCALE) # read as gray image # Step 2. conduct gamma estimation and image restoration with different methods or config _, img_cab = correct_average_brightness(img) # CAB _, img_agt = adaptive_gamma_transform(img, visual=False) # AGT gamma, img_agt_visual = adaptive_gamma_transform(img, visual=True) # AGT-ME-VISUAL _, img_bigc = blind_inverse_gamma_correction(img, "fast", True) # BIGC # Step.2 power spectrum analysis names = ["ORIGINAL", "BIGC", "AGT-ME", "CAB"] images = [img, img_bigc, img_agt, img_cab] styles = ["g-", "r-.", "b-", "r:"] line_index = 50 # 200 power_spec = [spectrum(temp) for temp in images] line_values = [line_value(temp) for temp in images] # Step.3 display the curves (intensity curve and power spectrum) plt.figure(figsize=(6, 3))