{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":71885,"databundleVersionId":8143495,"sourceType":"competition"}],"dockerImageVersionId":30822,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"\nImport neccessary libraries\n","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport os\nimport sys\nimport csv\nimport cv2","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:20.240739Z","iopub.execute_input":"2025-01-09T23:56:20.241080Z","iopub.status.idle":"2025-01-09T23:56:20.246322Z","shell.execute_reply.started":"2025-01-09T23:56:20.241053Z","shell.execute_reply":"2025-01-09T23:56:20.244961Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"\nHelper Function To See Images\n","metadata":{}},{"cell_type":"code","source":"def visualize_images_in_folder(folder_path, num_images=6, rows=2, cols=3):    \n    fig, axes = plt.subplots(rows, cols, figsize=(15, 10))\n    axes = axes.ravel()  \n    image_files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f)) and f.endswith(\".png\")]\n    num_images = min(num_images, len(image_files))    \n    for i in range(num_images):\n        img_file = image_files[i]\n        img_path = os.path.join(folder_path, img_file)       \n        img = cv2.imread(img_path)\n        if img is None:\n            print(f\"Failed to load image: {img_file}\")\n            continue       \n        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)       \n        axes[i].imshow(img)\n        axes[i].set_title(img_file)\n        axes[i].axis('off')  \n    for ax in axes[num_images:]:\n        ax.axis('off')    \n    plt.tight_layout()\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:20.247740Z","iopub.execute_input":"2025-01-09T23:56:20.248109Z","iopub.status.idle":"2025-01-09T23:56:20.263656Z","shell.execute_reply.started":"2025-01-09T23:56:20.248076Z","shell.execute_reply":"2025-01-09T23:56:20.262570Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"![Untitled.png](attachment:ab44f46d-e1e8-4fca-90d6-aab040d25697.png)","metadata":{},"attachments":{"ab44f46d-e1e8-4fca-90d6-aab040d25697.png":{"image/png":"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"}}},{"cell_type":"code","source":"folder_path = \"/kaggle/input/image-matching-challenge-2024/train/church/images/\"\nvisualize_images_in_folder(folder_path, num_images=3, rows=1, cols=3)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:20.265911Z","iopub.execute_input":"2025-01-09T23:56:20.266189Z","iopub.status.idle":"2025-01-09T23:56:21.456601Z","shell.execute_reply.started":"2025-01-09T23:56:20.266166Z","shell.execute_reply":"2025-01-09T23:56:21.455496Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#Read images in grayscale\nimage1 = cv2.imread('/kaggle/input/image-matching-challenge-2024/train/church/images/00009.png', cv2.IMREAD_GRAYSCALE)\nimage2 = cv2.imread('/kaggle/input/image-matching-challenge-2024/test/church/images/00029.png', cv2.IMREAD_GRAYSCALE)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:21.458354Z","iopub.execute_input":"2025-01-09T23:56:21.458899Z","iopub.status.idle":"2025-01-09T23:56:21.533015Z","shell.execute_reply.started":"2025-01-09T23:56:21.458850Z","shell.execute_reply":"2025-01-09T23:56:21.532157Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#Grayscale with 3 channels\nimage1_rgb = cv2.cvtColor(image1, cv2.COLOR_BGR2RGB)\nimage2_rgb = cv2.cvtColor(image2, cv2.COLOR_BGR2RGB)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:21.534065Z","iopub.execute_input":"2025-01-09T23:56:21.534412Z","iopub.status.idle":"2025-01-09T23:56:21.539974Z","shell.execute_reply.started":"2025-01-09T23:56:21.534387Z","shell.execute_reply":"2025-01-09T23:56:21.538855Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"SIFT\n\nThe Scale Invariant Feature Transform (SIFT) algorithm mimics human ability in machines. SIFT enables machines to recognize objects in images despite variations in angle or scale, a task challenging for traditional computer vision methods.","metadata":{}},{"cell_type":"code","source":"sift = cv2.SIFT_create()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:21.541012Z","iopub.execute_input":"2025-01-09T23:56:21.541355Z","iopub.status.idle":"2025-01-09T23:56:21.557067Z","shell.execute_reply.started":"2025-01-09T23:56:21.541320Z","shell.execute_reply":"2025-01-09T23:56:21.555922Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"keypoints1, descriptors1 = sift.detectAndCompute(image1, None)\nkeypoints2, descriptors2 = sift.detectAndCompute(image2, None)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:21.558217Z","iopub.execute_input":"2025-01-09T23:56:21.558617Z","iopub.status.idle":"2025-01-09T23:56:22.131177Z","shell.execute_reply.started":"2025-01-09T23:56:21.558582Z","shell.execute_reply":"2025-01-09T23:56:22.130021Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"matcher = cv2.BFMatcher()\nmatches = matcher.match(descriptors1, descriptors2)\nmatches = sorted(matches, key=lambda x: x.distance)\nmatched_image_sift = cv2.drawMatches(image1_rgb, keypoints1, image2_rgb, keypoints2, matches[:50], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:22.133828Z","iopub.execute_input":"2025-01-09T23:56:22.134142Z","iopub.status.idle":"2025-01-09T23:56:22.314130Z","shell.execute_reply.started":"2025-01-09T23:56:22.134114Z","shell.execute_reply":"2025-01-09T23:56:22.312977Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"matched_keypoints1 = np.float32([keypoints1[m.queryIdx].pt for m in matches[:25]])\nmatched_keypoints2 = np.float32([keypoints2[m.trainIdx].pt for m in matches[:25]])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:22.315694Z","iopub.execute_input":"2025-01-09T23:56:22.315998Z","iopub.status.idle":"2025-01-09T23:56:22.321842Z","shell.execute_reply.started":"2025-01-09T23:56:22.315972Z","shell.execute_reply":"2025-01-09T23:56:22.320297Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for pt1, pt2 in zip(matched_keypoints1, matched_keypoints2):\n    x1, y1 = pt1\n    x2, y2 = pt2\nplt.figure(figsize=(12, 8))\nplt.imshow(matched_image_sift)\nplt.title('SIFT')\nplt.axis('off')\nplt.savefig(\"matched_image_sift.png\", dpi=240, bbox_inches=\"tight\", pad_inches=0.1)\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:22.323095Z","iopub.execute_input":"2025-01-09T23:56:22.323415Z","iopub.status.idle":"2025-01-09T23:56:24.845954Z","shell.execute_reply.started":"2025-01-09T23:56:22.323379Z","shell.execute_reply":"2025-01-09T23:56:24.844864Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"AKAZE\n\nAKAZE (Accelerated-KAZE) is a feature detection and description algorithm introduced as an improvement over KAZE (KAZE (Kart-hikey Affine and Zernike Descriptors), which itself is an extension of the popular SIFT (Scale-Invariant Feature Transform) and SURF (Speeded-Up Robust Features) algorithms. AKAZE is designed to be both fast and robust to various transformations such as rotation, scale changes, and illumination changes.\n\nHere are some key points about AKAZE:\n\nSpeed and Efficiency: AKAZE is designed to be computationally efficient while maintaining robustness. It achieves this by using a nonlinear scale space and various optimizations.\n\nScale-Invariance: Like SIFT and SURF, AKAZE is scale-invariant, meaning it can detect features at different scales in an image. This is crucial for matching objects that may appear at different sizes in different images.\n\nRotation-Invariance: AKAZE also exhibits rotation invariance, meaning it can detect and match features even when the images are rotated relative to each other.\n\nAffine Transformation Handling: Unlike SIFT and SURF, which are not inherently affine-invariant, AKAZE is able to handle affine transformations such as shearing and stretching.\n\nDescriptor Generation: AKAZE generates descriptors that capture both local and global information about the keypoints, making them robust to changes in viewpoint, lighting, and occlusion.\n\nNonlinear Scale Space: AKAZE uses a nonlinear scale space representation, which allows it to adaptively adjust the scale at each keypoint location, leading to improved performance compared to linear scale space methods.","metadata":{}},{"cell_type":"code","source":"akaze = cv2.AKAZE_create()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:24.847154Z","iopub.execute_input":"2025-01-09T23:56:24.847583Z","iopub.status.idle":"2025-01-09T23:56:24.853503Z","shell.execute_reply.started":"2025-01-09T23:56:24.847551Z","shell.execute_reply":"2025-01-09T23:56:24.852512Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"keypoints1, descriptors1 = akaze.detectAndCompute(image1, None)\nkeypoints2, descriptors2 = akaze.detectAndCompute(image2, None)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:24.854594Z","iopub.execute_input":"2025-01-09T23:56:24.854952Z","iopub.status.idle":"2025-01-09T23:56:25.117790Z","shell.execute_reply.started":"2025-01-09T23:56:24.854917Z","shell.execute_reply":"2025-01-09T23:56:25.116839Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"matcher = cv2.BFMatcher()\nmatches = matcher.match(descriptors1, descriptors2)\nmatches = sorted(matches, key=lambda x: x.distance)\nmatched_image_akaze = cv2.drawMatches(image1_rgb, keypoints1, image2_rgb, keypoints2, matches[:50], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:25.118770Z","iopub.execute_input":"2025-01-09T23:56:25.119079Z","iopub.status.idle":"2025-01-09T23:56:25.296790Z","shell.execute_reply.started":"2025-01-09T23:56:25.119055Z","shell.execute_reply":"2025-01-09T23:56:25.295583Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"matched_keypoints1 = np.float32([keypoints1[m.queryIdx].pt for m in matches[:25]])\nmatched_keypoints2 = np.float32([keypoints2[m.trainIdx].pt for m in matches[:25]])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:56:25.297864Z","iopub.execute_input":"2025-01-09T23:56:25.298141Z","iopub.status.idle":"2025-01-09T23:56:25.303102Z","shell.execute_reply.started":"2025-01-09T23:56:25.298116Z","shell.execute_reply":"2025-01-09T23:56:25.302044Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for pt1, pt2 in zip(matched_keypoints1, matched_keypoints2):\n    x1, y1 = pt1\n    x2, y2 = pt2\nplt.figure(figsize=(12, 8))\nplt.imshow(matched_image_akaze)\nplt.title('AKAZE')\nplt.axis('off')\nplt.savefig(\"matched_image_akaze.png\", dpi=240, bbox_inches=\"tight\", pad_inches=0.1)\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:00.655745Z","iopub.execute_input":"2025-01-09T23:57:00.656177Z","iopub.status.idle":"2025-01-09T23:57:03.031900Z","shell.execute_reply.started":"2025-01-09T23:57:00.656135Z","shell.execute_reply":"2025-01-09T23:57:03.030776Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"CLAHE enhancement","metadata":{}},{"cell_type":"code","source":"clahe = cv2.createCLAHE(clipLimit=5)\n\nc_image1 = clahe.apply(image1)\nc_image2 = clahe.apply(image2)\n\n#CLAHE images with 3 channels\n#c_image1_3c = cv2.cvtColor(c_image1, cv2.COLOR_GRAY2BGR)\n#c_image2_3c = cv2.cvtColor(c_image2, cv2.COLOR_GRAY2BGR)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:03.033326Z","iopub.execute_input":"2025-01-09T23:57:03.033684Z","iopub.status.idle":"2025-01-09T23:57:03.049163Z","shell.execute_reply.started":"2025-01-09T23:57:03.033655Z","shell.execute_reply":"2025-01-09T23:57:03.047863Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.subplot(2,2,1)\nplt.imshow(image1_rgb)\nplt.axis(\"off\")\nplt.title(\"Image 1 RGB\")\n\nplt.subplot(2,2,2)\nplt.imshow(c_image1)\nplt.axis(\"off\")\nplt.title(\"Image 1 CLAHE\")\n\nplt.subplot(2,2,3)\nplt.imshow(image2_rgb)\nplt.axis(\"off\")\nplt.title(\"Image 1 RGB\")\n\nplt.subplot(2,2,4)\nplt.imshow(c_image2)\nplt.axis(\"off\")\nplt.title(\"Image 1 CLAHE\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:03.051159Z","iopub.execute_input":"2025-01-09T23:57:03.051575Z","iopub.status.idle":"2025-01-09T23:57:03.758461Z","shell.execute_reply.started":"2025-01-09T23:57:03.051507Z","shell.execute_reply":"2025-01-09T23:57:03.757401Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"SIFT + CLAHE","metadata":{}},{"cell_type":"code","source":"keypoints1_sc, descriptors1_sc = sift.detectAndCompute(c_image1, None)\nkeypoints2_sc, descriptors2_sc = sift.detectAndCompute(c_image2, None)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:03.759748Z","iopub.execute_input":"2025-01-09T23:57:03.760004Z","iopub.status.idle":"2025-01-09T23:57:04.476133Z","shell.execute_reply.started":"2025-01-09T23:57:03.759982Z","shell.execute_reply":"2025-01-09T23:57:04.474983Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"matcher = cv2.BFMatcher()\nmatches = matcher.match(descriptors1_sc, descriptors2_sc)\nmatches = sorted(matches, key=lambda x: x.distance)\nmatched_image_sift_clahe = cv2.drawMatches(image1_rgb, keypoints1_sc, image2_rgb, keypoints2_sc, matches[:50], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:04.477340Z","iopub.execute_input":"2025-01-09T23:57:04.477800Z","iopub.status.idle":"2025-01-09T23:57:05.086601Z","shell.execute_reply.started":"2025-01-09T23:57:04.477759Z","shell.execute_reply":"2025-01-09T23:57:05.085352Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"matched_keypoints1_sc = np.float32([keypoints1_sc[m.queryIdx].pt for m in matches[:25]])\nmatched_keypoints2_sc = np.float32([keypoints2_sc[m.trainIdx].pt for m in matches[:25]])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:05.087435Z","iopub.execute_input":"2025-01-09T23:57:05.087736Z","iopub.status.idle":"2025-01-09T23:57:05.093750Z","shell.execute_reply.started":"2025-01-09T23:57:05.087709Z","shell.execute_reply":"2025-01-09T23:57:05.092121Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for pt1, pt2 in zip(matched_keypoints1_sc, matched_keypoints2_sc):\n    x1, y1 = pt1\n    x2, y2 = pt2\nplt.figure(figsize=(12, 8))\nplt.imshow(matched_image_sift_clahe)\nplt.title('SIFT + CLAHE')\nplt.axis('off')\nplt.savefig('matched_image_sift_clahe.png', dpi=240, bbox_inches='tight', pad_inches=0.1)\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:05.094869Z","iopub.execute_input":"2025-01-09T23:57:05.095205Z","iopub.status.idle":"2025-01-09T23:57:07.475580Z","shell.execute_reply.started":"2025-01-09T23:57:05.095179Z","shell.execute_reply":"2025-01-09T23:57:07.474495Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"AKAZE + CLAHE","metadata":{}},{"cell_type":"code","source":"keypoints1_ac, descriptors1_ac = sift.detectAndCompute(c_image1, None)\nkeypoints2_ac, descriptors2_ac = sift.detectAndCompute(c_image2, None)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:07.477855Z","iopub.execute_input":"2025-01-09T23:57:07.478112Z","iopub.status.idle":"2025-01-09T23:57:08.164130Z","shell.execute_reply.started":"2025-01-09T23:57:07.478091Z","shell.execute_reply":"2025-01-09T23:57:08.162976Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"matcher = cv2.BFMatcher()\nmatches = matcher.match(descriptors1_ac, descriptors2_ac)\nmatches = sorted(matches, key=lambda x: x.distance)\nmatched_image_akaze_clahe = cv2.drawMatches(image1_rgb, keypoints1_ac, image2_rgb, keypoints2_ac, matches[:50], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:08.165284Z","iopub.execute_input":"2025-01-09T23:57:08.165610Z","iopub.status.idle":"2025-01-09T23:57:08.769938Z","shell.execute_reply.started":"2025-01-09T23:57:08.165569Z","shell.execute_reply":"2025-01-09T23:57:08.768802Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"matched_keypoints1_ac = np.float32([keypoints1_ac[m.queryIdx].pt for m in matches[:25]])\nmatched_keypoints2_ac = np.float32([keypoints2_ac[m.trainIdx].pt for m in matches[:25]])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:08.771196Z","iopub.execute_input":"2025-01-09T23:57:08.771876Z","iopub.status.idle":"2025-01-09T23:57:08.777155Z","shell.execute_reply.started":"2025-01-09T23:57:08.771825Z","shell.execute_reply":"2025-01-09T23:57:08.775896Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for pt1, pt2 in zip(matched_keypoints1_ac, matched_keypoints2_ac):\n    x1, y1 = pt1\n    x2, y2 = pt2\nplt.figure(figsize=(12, 8))\nplt.imshow(matched_image_akaze_clahe)\nplt.title('AKAZE + CLAHE')\nplt.axis('off')\nplt.savefig('matched_image_akaze_clahe.png', dpi=240, bbox_inches='tight', pad_inches=0.1)\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-09T23:57:08.778363Z","iopub.execute_input":"2025-01-09T23:57:08.778829Z","iopub.status.idle":"2025-01-09T23:57:11.296425Z","shell.execute_reply.started":"2025-01-09T23:57:08.778801Z","shell.execute_reply":"2025-01-09T23:57:11.295305Z"}},"outputs":[],"execution_count":null}]}