{"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":6749930,"sourceType":"datasetVersion","datasetId":3886232},{"sourceId":6765110,"sourceType":"datasetVersion","datasetId":3893531},{"sourceId":7156938,"sourceType":"datasetVersion","datasetId":4133291},{"sourceId":7159653,"sourceType":"datasetVersion","datasetId":4135137}],"dockerImageVersionId":30626,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install pyradiomics","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cv2\nimport numpy as np\nimport SimpleITK as sitk\nfrom radiomics import featureextractor\nimport csv\nfrom radiomics import imageoperations\nimport numpy as np\nimport SimpleITK as sitk\nimport pandas as pd\n\ndef process_image_and_create_dataframe(image_path, mask_path, output_csv, image_id, class_label, csv2_path):\n    # Load the image using OpenCV\n    image_data = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)\n\n    csv2 = pd.read_csv(csv2_path)\n    # Load the mask using OpenCV\n    mask_data = cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE)\n\n    # Convert 255 to 1 in the mask array\n    mask_data[mask_data == 255] = 1\n\n    # Convert NumPy array to SimpleITK images\n    image = sitk.GetImageFromArray(image_data)\n    mask = sitk.GetImageFromArray(mask_data)\n\n    # Set resampling parameters\n    resampled_spacing = (1.0, 1.0)  # Adjust as needed\n\n    # Resample the image and mask\n    image, mask = imageoperations.resampleImage(image, mask, resampledPixelSpacing=resampled_spacing)\n\n    # Create a PyRadiomics feature extractor\n    extractor = featureextractor.RadiomicsFeatureExtractor()\n\n    # Extract features\n    result = extractor.execute(image, mask)\n\n    # Save features to a CSV file\n    with open(output_csv, 'w') as f:\n        for key, value in result.items():\n            f.write(f\"{key},{value}\\n\")\n    # Transpose the CSV\n    with open(output_csv, 'r') as file:\n        reader = csv.reader(file)\n        data = list(reader)\n\n    transposed_data = [list(row) for row in zip(*data)]\n\n    with open(output_csv, 'w', newline='') as file:\n        writer = csv.writer(file)\n        writer.writerows(transposed_data)\n\n    # Read the transposed CSV file into 'mf'\n    with open(output_csv, 'r') as file:\n        mf = list(csv.reader(file))\n\n    # Create a DataFrame from the transposed data\n    df = pd.DataFrame(mf[1:], columns=mf[0])\n\n    # Add 'image_id' and 'class' columns\n    df.insert(0, 'image_id', value=image_id)\n    df.insert(0, 'class', value=class_label)\n    row_with_image_id = csv2[csv2['image_id'] == image_id]\n    df['class'] = row_with_image_id['label']\n    return df\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\n\ndef process_images_and_create_dataframe(image_dir, mask_dir, output_csv, csv2_path):\n    csv2 = pd.read_csv(csv2_path)\n    dfs = []  # List to store individual DataFrames\n    for filename in os.listdir(image_dir):\n        if filename.endswith(\".png\"):\n            image_path = os.path.join(image_dir, filename)\n            mask_filename = \"masked_\" + filename\n            mask_path = os.path.join(mask_dir, mask_filename)\n            parts = filename.split('.')\n            image_id = parts[0]\n            class_label = 'your_class_here'\n\n            try:\n                df = process_image_and_create_dataframe(image_path, mask_path, output_csv, image_id, class_label, csv2_path)\n                row_with_image_id = csv2[csv2['image_id'] == image_id]\n                df['class'] = row_with_image_id['label'].values[0]\n                dfs.append(df)\n            except ValueError as e:\n                print(f\"Error processing pair ({image_path}, {mask_path}): {str(e)}. Skipping pair...\")\n\n    # Concatenate all DataFrames into a single DataFrame\n    final_df = pd.concat(dfs, ignore_index=True)\n\n    # Save the final DataFrame to a CSV file\n    final_df.to_csv(output_csv, index=False)\n\n    print(\"Process completed. CSV file saved.\")\n\n    return final_df\n\n\n# Example usage:\nimage_dir = \"/kaggle/input/all-train-dataset/train\"\nmask_dir = \"/kaggle/input/masked-images\"\ncsv_path = \"/kaggle/input/trains/train.csv\"\noutput_csv = \"output_features.csv\"\n\nresult_df = process_images_and_create_dataframe(image_dir, mask_dir, output_csv, csv_path)\n\n# Display the DataFrame as a table\nresult_df","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}