{
  "id": 669817,
  "title": "PhysioNet | 97th place solution",
  "url": "/competitions/physionet-ecg-image-digitization/discussion/669817",
  "author_name": "sasa_leaf",
  "post_date": "2026-01-24T13:32:17.092000",
  "votes": 5,
  "comment_count": 0,
  "views": 0,
  "content": "<h1>Acknowledgements</h1>\n<p>I would like to thank <a href=\"https://www.kaggle.com/competitions/physionet-ecg-image-digitization\" target=\"_blank\">PhysioNet</a> and Kaggle for organizing this competition. This was my first medal, so it is especially memorable for me.\nI would also like to give special thanks to <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck</a> for sharing the overall pipeline. Thanks to hengck’s well-organized pipeline, the code released toward the end of the competition was easy to read, making experimentation and iteration much smoother.</p>\n<hr>\n<h1>Summary</h1>\n<ul>\n<li>This solution is based on hengck’s pipeline:<br>\nStage 0 (alignment) -&gt; Stage 1 (grid rectification) -&gt; Stage 2 (Net3 signal extraction)</li>\n<li>For each image segment type (e.g., “0001”, “0003”, …), I explored different preprocessing methods and applied improvements that enhance the weaknesses of each image type.</li>\n<li>Preprocessing was applied at two points: before Stage 0 and before Stage 2.</li>\n<li>The submission code can be found <a href=\"https://www.kaggle.com/code/sasaleaf/physionet-97th-place-solution-cleaning-image\" target=\"_blank\">here</a>.</li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>Segment</th>\n<th>Baseline preprocessing (before stage0)</th>\n<th>Changes before stage0</th>\n<th>Changes before stage2</th>\n<th>My score</th>\n<th>Gain vs baseline</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>CV “0001”</td>\n<td>-</td>\n<td></td>\n<td></td>\n<td>21.103</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>CV “0003”</td>\n<td>Contrast correction</td>\n<td></td>\n<td></td>\n<td>19.816</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>CV “0004”</td>\n<td>-</td>\n<td></td>\n<td>+ Color grid lines red</td>\n<td>18.237</td>\n<td>+0.766</td>\n</tr>\n<tr>\n<td>CV “0005”</td>\n<td>Illumination correction, contrast correction</td>\n<td></td>\n<td></td>\n<td>20.612</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>CV “0006”</td>\n<td>Bilateral blur, illumination correction</td>\n<td>+ Stronger bilateral filtering for moiré removal<br>+ Stronger illumination correction</td>\n<td></td>\n<td>18.293</td>\n<td>+2.115</td>\n</tr>\n<tr>\n<td>CV “0009”</td>\n<td>Illumination correction, median blur</td>\n<td>+ Contrast correction<br>- Median blur</td>\n<td></td>\n<td>19.044</td>\n<td>+0.430</td>\n</tr>\n<tr>\n<td>CV “0010”</td>\n<td>Illumination correction, contrast correction</td>\n<td></td>\n<td></td>\n<td>20.428</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>CV “0011”</td>\n<td>Contrast correction</td>\n<td></td>\n<td></td>\n<td>19.671</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>CV “0012”</td>\n<td>-</td>\n<td></td>\n<td>+ Color grid lines red</td>\n<td>17.532</td>\n<td>+1.208</td>\n</tr>\n<tr>\n<td><strong>CV Mean</strong></td>\n<td></td>\n<td></td>\n<td></td>\n<td><strong>19.415</strong></td>\n<td><strong>+0.502</strong></td>\n</tr>\n<tr>\n<td><strong>Public LB</strong></td>\n<td></td>\n<td></td>\n<td></td>\n<td><strong>18.47</strong></td>\n<td><strong>+0.26</strong></td>\n</tr>\n<tr>\n<td><strong>Private LB</strong></td>\n<td></td>\n<td></td>\n<td></td>\n<td><strong>18.325</strong></td>\n<td><strong>+0.242</strong></td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li>The LB comparison is for reference only, as an <a href=\"https://www.kaggle.com/code/alejopaullier/physionet-image-multi-class-train\" target=\"_blank\">alejopaullier's model</a> was used to classify image types.</li>\n<li>CV scores were computed using 50 training samples (sort=False).</li>\n<li>The baseline is based on <a href=\"https://www.kaggle.com/code/tonylica/physionet-ecg-streamlined-inference\" target=\"_blank\">tonylica’s code</a>.</li>\n</ul>\n<hr>\n<h1>Processing by Image Type</h1>\n<h2>0001</h2>\n<ul>\n<li>Using the public baseline, this image type achieved the highest score among all types, so I did not apply any modifications and used this score as the target.</li>\n</ul>\n<h2>0003, 0011</h2>\n<ul>\n<li>I tried stain removal preprocessing, but it did not improve the score. I believe hengck’s model was designed to perform well even on noise-augmented data.</li>\n<li>Since these types already had relatively high scores, I did not spend much time further optimizing them.</li>\n</ul>\n<h2>0004, 0012</h2>\n<ul>\n<li>Although the only difference between “0004” and “0003” is whether the image is color, there was a score gap of more than 2, so I believed improvement was possible.</li>\n<li>I tried applying the same preprocessing used for the color versions (“0003”, “0011”) in the baseline, but both CV and LB scores decreased.</li>\n<li>I then focused on the fact that the key difference from “0003” and “0011” was whether the grid lines were red.<ul>\n<li>Overlaying a fixed red grid mask had almost no effect.</li>\n<li><strong>Detecting thin black lines and converting them to red</strong> (assuming they correspond to grid lines) improved the CV score by about +1 for both “0004” and “0012”, and also improved the LB score.\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11715915%2Fda30da983319f96bced87d5bd5f797a8%2Fpseudo_red_grid.png?generation=1769260054934989&amp;alt=media\" alt=\"\"></li></ul></li>\n</ul>\n<h2>0005, 0009, 0010</h2>\n<ul>\n<li>I attempted several improvements for “0005” and “0010”, but could not surpass the baseline.</li>\n<li>Since their baseline scores were already high (second only to “0001”), I did not explore them extensively.</li>\n<li>Applying the preprocessing used for “0005” and “0010” to the similar type “0009” resulted in slight improvements in both CV and LB scores.</li>\n</ul>\n<h2>0006</h2>\n<ul>\n<li>The original images contain moiré patterns where colors change periodically every few pixels. When applying projective transformation at Stage 1, these periodic stripe patterns were amplified.</li>\n<li>To address this, I strengthened <strong>the bilateral filter to remove moiré patterns</strong> while preserving grid lines and signal lines.</li>\n<li>Combined with the original illumination correction that removes spatial color variation, this led to about +2 improvements in CV, and also improved the LB score.\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11715915%2F0be85d8bc5ce0ec3861663b26392ae36%2Fmoire_removed.png?generation=1769260035287814&amp;alt=media\" alt=\"\"></li>\n</ul>",
  "messages": [
    {
      "id": 3396173,
      "postDate": "2026-01-24T13:32:17.093Z",
      "content": "<h1>Acknowledgements</h1>\n<p>I would like to thank <a href=\"https://www.kaggle.com/competitions/physionet-ecg-image-digitization\" target=\"_blank\">PhysioNet</a> and Kaggle for organizing this competition. This was my first medal, so it is especially memorable for me.\nI would also like to give special thanks to <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck</a> for sharing the overall pipeline. Thanks to hengck’s well-organized pipeline, the code released toward the end of the competition was easy to read, making experimentation and iteration much smoother.</p>\n<hr>\n<h1>Summary</h1>\n<ul>\n<li>This solution is based on hengck’s pipeline:<br>\nStage 0 (alignment) -&gt; Stage 1 (grid rectification) -&gt; Stage 2 (Net3 signal extraction)</li>\n<li>For each image segment type (e.g., “0001”, “0003”, …), I explored different preprocessing methods and applied improvements that enhance the weaknesses of each image type.</li>\n<li>Preprocessing was applied at two points: before Stage 0 and before Stage 2.</li>\n<li>The submission code can be found <a href=\"https://www.kaggle.com/code/sasaleaf/physionet-97th-place-solution-cleaning-image\" target=\"_blank\">here</a>.</li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>Segment</th>\n<th>Baseline preprocessing (before stage0)</th>\n<th>Changes before stage0</th>\n<th>Changes before stage2</th>\n<th>My score</th>\n<th>Gain vs baseline</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>CV “0001”</td>\n<td>-</td>\n<td></td>\n<td></td>\n<td>21.103</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>CV “0003”</td>\n<td>Contrast correction</td>\n<td></td>\n<td></td>\n<td>19.816</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>CV “0004”</td>\n<td>-</td>\n<td></td>\n<td>+ Color grid lines red</td>\n<td>18.237</td>\n<td>+0.766</td>\n</tr>\n<tr>\n<td>CV “0005”</td>\n<td>Illumination correction, contrast correction</td>\n<td></td>\n<td></td>\n<td>20.612</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>CV “0006”</td>\n<td>Bilateral blur, illumination correction</td>\n<td>+ Stronger bilateral filtering for moiré removal<br>+ Stronger illumination correction</td>\n<td></td>\n<td>18.293</td>\n<td>+2.115</td>\n</tr>\n<tr>\n<td>CV “0009”</td>\n<td>Illumination correction, median blur</td>\n<td>+ Contrast correction<br>- Median blur</td>\n<td></td>\n<td>19.044</td>\n<td>+0.430</td>\n</tr>\n<tr>\n<td>CV “0010”</td>\n<td>Illumination correction, contrast correction</td>\n<td></td>\n<td></td>\n<td>20.428</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>CV “0011”</td>\n<td>Contrast correction</td>\n<td></td>\n<td></td>\n<td>19.671</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>CV “0012”</td>\n<td>-</td>\n<td></td>\n<td>+ Color grid lines red</td>\n<td>17.532</td>\n<td>+1.208</td>\n</tr>\n<tr>\n<td><strong>CV Mean</strong></td>\n<td></td>\n<td></td>\n<td></td>\n<td><strong>19.415</strong></td>\n<td><strong>+0.502</strong></td>\n</tr>\n<tr>\n<td><strong>Public LB</strong></td>\n<td></td>\n<td></td>\n<td></td>\n<td><strong>18.47</strong></td>\n<td><strong>+0.26</strong></td>\n</tr>\n<tr>\n<td><strong>Private LB</strong></td>\n<td></td>\n<td></td>\n<td></td>\n<td><strong>18.325</strong></td>\n<td><strong>+0.242</strong></td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li>The LB comparison is for reference only, as an <a href=\"https://www.kaggle.com/code/alejopaullier/physionet-image-multi-class-train\" target=\"_blank\">alejopaullier's model</a> was used to classify image types.</li>\n<li>CV scores were computed using 50 training samples (sort=False).</li>\n<li>The baseline is based on <a href=\"https://www.kaggle.com/code/tonylica/physionet-ecg-streamlined-inference\" target=\"_blank\">tonylica’s code</a>.</li>\n</ul>\n<hr>\n<h1>Processing by Image Type</h1>\n<h2>0001</h2>\n<ul>\n<li>Using the public baseline, this image type achieved the highest score among all types, so I did not apply any modifications and used this score as the target.</li>\n</ul>\n<h2>0003, 0011</h2>\n<ul>\n<li>I tried stain removal preprocessing, but it did not improve the score. I believe hengck’s model was designed to perform well even on noise-augmented data.</li>\n<li>Since these types already had relatively high scores, I did not spend much time further optimizing them.</li>\n</ul>\n<h2>0004, 0012</h2>\n<ul>\n<li>Although the only difference between “0004” and “0003” is whether the image is color, there was a score gap of more than 2, so I believed improvement was possible.</li>\n<li>I tried applying the same preprocessing used for the color versions (“0003”, “0011”) in the baseline, but both CV and LB scores decreased.</li>\n<li>I then focused on the fact that the key difference from “0003” and “0011” was whether the grid lines were red.<ul>\n<li>Overlaying a fixed red grid mask had almost no effect.</li>\n<li><strong>Detecting thin black lines and converting them to red</strong> (assuming they correspond to grid lines) improved the CV score by about +1 for both “0004” and “0012”, and also improved the LB score.\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11715915%2Fda30da983319f96bced87d5bd5f797a8%2Fpseudo_red_grid.png?generation=1769260054934989&amp;alt=media\" alt=\"\"></li></ul></li>\n</ul>\n<h2>0005, 0009, 0010</h2>\n<ul>\n<li>I attempted several improvements for “0005” and “0010”, but could not surpass the baseline.</li>\n<li>Since their baseline scores were already high (second only to “0001”), I did not explore them extensively.</li>\n<li>Applying the preprocessing used for “0005” and “0010” to the similar type “0009” resulted in slight improvements in both CV and LB scores.</li>\n</ul>\n<h2>0006</h2>\n<ul>\n<li>The original images contain moiré patterns where colors change periodically every few pixels. When applying projective transformation at Stage 1, these periodic stripe patterns were amplified.</li>\n<li>To address this, I strengthened <strong>the bilateral filter to remove moiré patterns</strong> while preserving grid lines and signal lines.</li>\n<li>Combined with the original illumination correction that removes spatial color variation, this led to about +2 improvements in CV, and also improved the LB score.\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11715915%2F0be85d8bc5ce0ec3861663b26392ae36%2Fmoire_removed.png?generation=1769260035287814&amp;alt=media\" alt=\"\"></li>\n</ul>",
      "rawMarkdown": "# Acknowledgements\nI would like to thank [PhysioNet](https://www.kaggle.com/competitions/physionet-ecg-image-digitization) and Kaggle for organizing this competition. This was my first medal, so it is especially memorable for me.\nI would also like to give special thanks to [@hengck](https://www.kaggle.com/hengck23) for sharing the overall pipeline. Thanks to hengck’s well-organized pipeline, the code released toward the end of the competition was easy to read, making experimentation and iteration much smoother.\n\n---\n# Summary\n- This solution is based on hengck’s pipeline:<br>\nStage 0 (alignment) -> Stage 1 (grid rectification) -> Stage 2 (Net3 signal extraction)\n- For each image segment type (e.g., “0001”, “0003”, …), I explored different preprocessing methods and applied improvements that enhance the weaknesses of each image type.\n- Preprocessing was applied at two points: before Stage 0 and before Stage 2.\n- The submission code can be found [here](https://www.kaggle.com/code/sasaleaf/physionet-97th-place-solution-cleaning-image).\n\n| Segment        | Baseline preprocessing (before stage0)       | Changes before stage0                                                                  | Changes before stage2  | My score   | Gain vs baseline |\n| -------------- | -------------------------------------------- | -------------------------------------------------------------------------------------- | ---------------------- | ---------- | ---------------- |\n| CV “0001”      | -                                            |                                                                                        |                        | 21.103     | +0               |\n| CV “0003”      | Contrast correction                          |                                                                                        |                        | 19.816     | +0               |\n| CV “0004”      | -                                            |                                                                                        | + Color grid lines red | 18.237     | +0.766           |\n| CV “0005”      | Illumination correction, contrast correction |                                                                                        |                        | 20.612     | +0               |\n| CV “0006”      | Bilateral blur, illumination correction      | + Stronger bilateral filtering for moiré removal<br>+ Stronger illumination correction |                        | 18.293     | +2.115           |\n| CV “0009”      | Illumination correction, median blur         | + Contrast correction<br>- Median blur                                                 |                        | 19.044     | +0.430           |\n| CV “0010”      | Illumination correction, contrast correction |                                                                                        |                        | 20.428     | +0               |\n| CV “0011”      | Contrast correction                          |                                                                                        |                        | 19.671     | +0               |\n| CV “0012”      | -                                            |                                                                                        | + Color grid lines red | 17.532     | +1.208           |\n| **CV Mean**    |                                              |                                                                                        |                        | **19.415** | **+0.502**       |\n| **Public LB**  |                                              |                                                                                        |                        | **18.47**  | **+0.26**        |\n| **Private LB** |                                              |                                                                                        |                        | **18.325** | **+0.242**       |\n\n- The LB comparison is for reference only, as an [alejopaullier's model](https://www.kaggle.com/code/alejopaullier/physionet-image-multi-class-train) was used to classify image types.\n- CV scores were computed using 50 training samples (sort=False).\n- The baseline is based on [tonylica’s code](https://www.kaggle.com/code/tonylica/physionet-ecg-streamlined-inference).\n\n---\n# Processing by Image Type\n## 0001\n- Using the public baseline, this image type achieved the highest score among all types, so I did not apply any modifications and used this score as the target.\n\n## 0003, 0011\n- I tried stain removal preprocessing, but it did not improve the score. I believe hengck’s model was designed to perform well even on noise-augmented data.\n- Since these types already had relatively high scores, I did not spend much time further optimizing them.\n\n## 0004, 0012\n- Although the only difference between “0004” and “0003” is whether the image is color, there was a score gap of more than 2, so I believed improvement was possible.\n- I tried applying the same preprocessing used for the color versions (“0003”, “0011”) in the baseline, but both CV and LB scores decreased.\n- I then focused on the fact that the key difference from “0003” and “0011” was whether the grid lines were red.\n  - Overlaying a fixed red grid mask had almost no effect.\n  - **Detecting thin black lines and converting them to red** (assuming they correspond to grid lines) improved the CV score by about +1 for both “0004” and “0012”, and also improved the LB score.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11715915%2Fda30da983319f96bced87d5bd5f797a8%2Fpseudo_red_grid.png?generation=1769260054934989&alt=media)\n\n## 0005, 0009, 0010\n- I attempted several improvements for “0005” and “0010”, but could not surpass the baseline.\n- Since their baseline scores were already high (second only to “0001”), I did not explore them extensively.\n- Applying the preprocessing used for “0005” and “0010” to the similar type “0009” resulted in slight improvements in both CV and LB scores.\n\n## 0006\n- The original images contain moiré patterns where colors change periodically every few pixels. When applying projective transformation at Stage 1, these periodic stripe patterns were amplified.\n- To address this, I strengthened **the bilateral filter to remove moiré patterns** while preserving grid lines and signal lines.\n- Combined with the original illumination correction that removes spatial color variation, this led to about +2 improvements in CV, and also improved the LB score.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11715915%2F0be85d8bc5ce0ec3861663b26392ae36%2Fmoire_removed.png?generation=1769260035287814&alt=media)",
      "votes": 5
    }
  ],
  "comments": [],
  "raw_markdown_by_id": {
    "3396173": "# Acknowledgements\nI would like to thank [PhysioNet](https://www.kaggle.com/competitions/physionet-ecg-image-digitization) and Kaggle for organizing this competition. This was my first medal, so it is especially memorable for me.\nI would also like to give special thanks to [@hengck](https://www.kaggle.com/hengck23) for sharing the overall pipeline. Thanks to hengck’s well-organized pipeline, the code released toward the end of the competition was easy to read, making experimentation and iteration much smoother.\n\n---\n# Summary\n- This solution is based on hengck’s pipeline:<br>\nStage 0 (alignment) -> Stage 1 (grid rectification) -> Stage 2 (Net3 signal extraction)\n- For each image segment type (e.g., “0001”, “0003”, …), I explored different preprocessing methods and applied improvements that enhance the weaknesses of each image type.\n- Preprocessing was applied at two points: before Stage 0 and before Stage 2.\n- The submission code can be found [here](https://www.kaggle.com/code/sasaleaf/physionet-97th-place-solution-cleaning-image).\n\n| Segment        | Baseline preprocessing (before stage0)       | Changes before stage0                                                                  | Changes before stage2  | My score   | Gain vs baseline |\n| -------------- | -------------------------------------------- | -------------------------------------------------------------------------------------- | ---------------------- | ---------- | ---------------- |\n| CV “0001”      | -                                            |                                                                                        |                        | 21.103     | +0               |\n| CV “0003”      | Contrast correction                          |                                                                                        |                        | 19.816     | +0               |\n| CV “0004”      | -                                            |                                                                                        | + Color grid lines red | 18.237     | +0.766           |\n| CV “0005”      | Illumination correction, contrast correction |                                                                                        |                        | 20.612     | +0               |\n| CV “0006”      | Bilateral blur, illumination correction      | + Stronger bilateral filtering for moiré removal<br>+ Stronger illumination correction |                        | 18.293     | +2.115           |\n| CV “0009”      | Illumination correction, median blur         | + Contrast correction<br>- Median blur                                                 |                        | 19.044     | +0.430           |\n| CV “0010”      | Illumination correction, contrast correction |                                                                                        |                        | 20.428     | +0               |\n| CV “0011”      | Contrast correction                          |                                                                                        |                        | 19.671     | +0               |\n| CV “0012”      | -                                            |                                                                                        | + Color grid lines red | 17.532     | +1.208           |\n| **CV Mean**    |                                              |                                                                                        |                        | **19.415** | **+0.502**       |\n| **Public LB**  |                                              |                                                                                        |                        | **18.47**  | **+0.26**        |\n| **Private LB** |                                              |                                                                                        |                        | **18.325** | **+0.242**       |\n\n- The LB comparison is for reference only, as an [alejopaullier's model](https://www.kaggle.com/code/alejopaullier/physionet-image-multi-class-train) was used to classify image types.\n- CV scores were computed using 50 training samples (sort=False).\n- The baseline is based on [tonylica’s code](https://www.kaggle.com/code/tonylica/physionet-ecg-streamlined-inference).\n\n---\n# Processing by Image Type\n## 0001\n- Using the public baseline, this image type achieved the highest score among all types, so I did not apply any modifications and used this score as the target.\n\n## 0003, 0011\n- I tried stain removal preprocessing, but it did not improve the score. I believe hengck’s model was designed to perform well even on noise-augmented data.\n- Since these types already had relatively high scores, I did not spend much time further optimizing them.\n\n## 0004, 0012\n- Although the only difference between “0004” and “0003” is whether the image is color, there was a score gap of more than 2, so I believed improvement was possible.\n- I tried applying the same preprocessing used for the color versions (“0003”, “0011”) in the baseline, but both CV and LB scores decreased.\n- I then focused on the fact that the key difference from “0003” and “0011” was whether the grid lines were red.\n  - Overlaying a fixed red grid mask had almost no effect.\n  - **Detecting thin black lines and converting them to red** (assuming they correspond to grid lines) improved the CV score by about +1 for both “0004” and “0012”, and also improved the LB score.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11715915%2Fda30da983319f96bced87d5bd5f797a8%2Fpseudo_red_grid.png?generation=1769260054934989&alt=media)\n\n## 0005, 0009, 0010\n- I attempted several improvements for “0005” and “0010”, but could not surpass the baseline.\n- Since their baseline scores were already high (second only to “0001”), I did not explore them extensively.\n- Applying the preprocessing used for “0005” and “0010” to the similar type “0009” resulted in slight improvements in both CV and LB scores.\n\n## 0006\n- The original images contain moiré patterns where colors change periodically every few pixels. When applying projective transformation at Stage 1, these periodic stripe patterns were amplified.\n- To address this, I strengthened **the bilateral filter to remove moiré patterns** while preserving grid lines and signal lines.\n- Combined with the original illumination correction that removes spatial color variation, this led to about +2 improvements in CV, and also improved the LB score.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11715915%2F0be85d8bc5ce0ec3861663b26392ae36%2Fmoire_removed.png?generation=1769260035287814&alt=media)"
  }
}