-
-
Notifications
You must be signed in to change notification settings - Fork 125
Blur Animation source code and simplified output #328
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…f a single-channel image of letter A. I added the A.tif image in data and the exported animation directly into the fig directory
Thank you!Thank you for your pull request 😃 🤖 This automated message can help you check the rendered files in your submission for clarity. If you have any questions, please feel free to open an issue in {sandpaper}. If you have files that automatically render output (e.g. R Markdown), then you should check for the following:
Rendered Changes🔍 Inspect the changes: https://github.com/datacarpentry/image-processing/compare/md-outputs..md-outputs-PR-328 The following changes were observed in the rendered markdown documents:
What does this mean?If you have source files that require output and figures to be generated (e.g. R Markdown), then it is important to make sure the generated figures and output are reproducible. This output provides a way for you to inspect the output in a diff-friendly manner so that it's easy to see the changes that occur due to new software versions or randomisation. ⏱️ Updated at 2025-03-25 20:09:35 +0000 |
Thank you very much @marcodallavecchia for this contribution. We discussed this in today's Curriculum Advisory Committee meeting. We do like the new animation and envision that it can be included in the blurring episode. Regarding the location of the script, we do not have an ideal solution but our consensus (as of now) is to keep code scripts that re-generate figures in One suggestion I have is that you might use a default value for the kernel size so that maintainers can reproduce the figure without having to guess the kernel size. I tend to prefer scripts that do not require interactive input for reproducibility. There may be other feedback on the script, so I'll keep the pull request open for others to comment - 👋 @mkcor. |
@uschille thanks a lot for coming back to this!
👋 Marco |
Thanks @marcodallavecchia - the new blur animation looks great! I'd agree with @uschille 's comments above. We will need to update the text in the blurring episode to match this new animation. For example, above this gif it says |
Yes, it will require a bit of work to incorporate the new animation in the lesson. @marcodallavecchia would you perhaps be willing to give it a try? I'd suggest to keep this PR open while we are working on it. Does this sound reasonable @K-Meech? |
Sounds good to me @uschille ! |
Dear @uschille and @K-Meech, Just to clarify, should I open a new PR only with the lecture changes, or should I integrate the text changes with the blur animation code altogether? |
Great - thanks @marcodallavecchia ! I'd say incorporate it directly into this PR, along with the blur animation code. |
Hello, sorry for the long delay on an update on this! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @marcodallavecchia - these changes are looking great! Sorry for the delay in getting back to you.
I noticed one comment that needs to be removed from the script now that user input is removed (see below). Otherwise, I think the line you added to the blurring episode introduces the new animation nicely 😄 I'd be happy to merge this into the main lesson soon - @uschille is there anything else you'd like to change?
# The script can be executed with | ||
# $ python create_blur_animation.py | ||
# | ||
# The script will prompt the user to enter the kernel size. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# The script will prompt the user to enter the kernel size. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh good catch! I just pushed a new version with some better documentation of the packages needed to run the code as well. Thanks for the feedback!
…nts to help reproducible execution
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm looking forward to seeing this merged!
### | ||
|
||
### USAGE | ||
# The script requires the following Python packages: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wouldn't it be better/safer to specify package versions as well?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would you in favor of adding a env.yml or requirements.txt file in the source directory at that point? Otherwise I could change the phrasing with: The script was tested with the following Python packages
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I hope it's not confusing to add an env.yml
file in episodes/fig/source/06-blurring/
(what if there were more than one script in there?). Personally, I think it would be enough to 'copy-paste' the content of the env/requirements file right here, so you just append ==[version number]
at the end of lines 13--16.
# | ||
# The script can be executed with | ||
# $ python create_blur_animation.py | ||
# The output animation will be saved directly in the fig folder where the less markdown will pick it up |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the 'less markdown,' please?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ooops sorry another typo.. It was supposed to be lesson
. I fixed it in the next commit.
episodes/06-blurring.md
Outdated
@@ -247,8 +247,7 @@ in [the scikit-image documentation](https://scikit-image.org/docs/dev/user_guide | |||
|
|||
:::::::::::::::::::::::::::::::::::::::::::::::::: | |||
|
|||
This animation shows how the blur kernel moves along in the original image in | |||
order to calculate the colour channel values for the blurred image. | |||
Let's take a very simple grayscale image to see blurring in action. The animation below shows how the blur kernel (large red square) moves along the image on the left in order to calculate the corresponding values for the blurred image (yellow central square) on the right. In this simple case the image is composed of only a single channel, but it would work as well on a multi-channel image. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's take a very simple grayscale image to see blurring in action. The animation below shows how the blur kernel (large red square) moves along the image on the left in order to calculate the corresponding values for the blurred image (yellow central square) on the right. In this simple case the image is composed of only a single channel, but it would work as well on a multi-channel image. | |
Let's consider a very simple image to see blurring in action. The animation below shows how the blur kernel (large red square) moves along the image on the left in order to calculate the corresponding values for the blurred image (yellow central square) on the right. In this simple case, the original image is single-channel, but blurring would work likewise on a multi-channel image. |
I suggested removing 'grayscale' not because it is wrong, of course, but just to avoid the repetition afterwards (when we mention it is single-channel) and because it's actually even 'simpler' than grayscale, it's binary.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed, thanks for the rephrasing. I implemented this change in the next commit.
Hello @mkcor! Thanks for the feedback again. I implemented all the changes you suggested, the only thing I'm not sure about would be about the package requirements. I would be in favor of adding a conda env.yml or a pip requirements.txt file in the source directory if we really want to make the script fully reproducible. Let me know if you like the idea and I can add one! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you, @marcodallavecchia! I quite like that your script is so self-contained with the comments describing how to run it and possibly improve it, so I'd keep the list of packages it depends on inside as well. That's my personal preference; I'm not opposed to including an env file if @datacarpentry/image-processing-curriculum-maintainers lean towards this other preference.
### | ||
|
||
### USAGE | ||
# The script requires the following Python packages: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I hope it's not confusing to add an env.yml
file in episodes/fig/source/06-blurring/
(what if there were more than one script in there?). Personally, I think it would be enough to 'copy-paste' the content of the env/requirements file right here, so you just append ==[version number]
at the end of lines 13--16.
# Install them with | ||
# $ conda install numpy scipy matplotlib tqdm |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# Install them with | |
# $ conda install numpy scipy matplotlib tqdm |
And then users/readers are free to install the above-mentioned packages as they wish.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mkcor I see the point, we can go that way, and simply list the packages and let a user install them how they wish. I guess then the only issue I see that while I simply installed the 4 packages mentioned above the actual list is much longer because of dependencies.
$ conda env export --from-history
name: img-proc
channels:
- conda-forge
dependencies:
- python=3.12
- matplotlib
- numpy
- scipy
- tqdm
$ conda list
# packages in environment at /home/mdallave/miniforge3/envs/img-proc:
#
# Name Version Build Channel
_libgcc_mutex 0.1 conda_forge conda-forge
_openmp_mutex 4.5 2_gnu conda-forge
alsa-lib 1.2.13 hb9d3cd8_0 conda-forge
brotli 1.1.0 hb9d3cd8_2 conda-forge
brotli-bin 1.1.0 hb9d3cd8_2 conda-forge
bzip2 1.0.8 h4bc722e_7 conda-forge
ca-certificates 2025.1.31 hbcca054_0 conda-forge
cairo 1.18.4 h3394656_0 conda-forge
colorama 0.4.6 pyhd8ed1ab_1 conda-forge
contourpy 1.3.1 py312h68727a3_0 conda-forge
cycler 0.12.1 pyhd8ed1ab_1 conda-forge
cyrus-sasl 2.1.27 h54b06d7_7 conda-forge
dbus 1.13.6 h5008d03_3 conda-forge
double-conversion 3.3.1 h5888daf_0 conda-forge
expat 2.6.4 h5888daf_0 conda-forge
font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge
font-ttf-inconsolata 3.000 h77eed37_0 conda-forge
font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge
font-ttf-ubuntu 0.83 h77eed37_3 conda-forge
fontconfig 2.15.0 h7e30c49_1 conda-forge
fonts-conda-ecosystem 1 0 conda-forge
fonts-conda-forge 1 0 conda-forge
fonttools 4.56.0 py312h178313f_0 conda-forge
freetype 2.13.3 h48d6fc4_0 conda-forge
graphite2 1.3.13 h59595ed_1003 conda-forge
harfbuzz 10.4.0 h76408a6_0 conda-forge
icu 75.1 he02047a_0 conda-forge
keyutils 1.6.1 h166bdaf_0 conda-forge
kiwisolver 1.4.8 py312h84d6215_0 conda-forge
krb5 1.21.3 h659f571_0 conda-forge
lcms2 2.17 h717163a_0 conda-forge
ld_impl_linux-64 2.43 h712a8e2_4 conda-forge
lerc 4.0.0 h27087fc_0 conda-forge
libblas 3.9.0 31_h59b9bed_openblas conda-forge
libbrotlicommon 1.1.0 hb9d3cd8_2 conda-forge
libbrotlidec 1.1.0 hb9d3cd8_2 conda-forge
libbrotlienc 1.1.0 hb9d3cd8_2 conda-forge
libcblas 3.9.0 31_he106b2a_openblas conda-forge
libclang-cpp19.1 19.1.7 default_hb5137d0_1 conda-forge
libclang13 19.1.7 default_h9c6a7e4_1 conda-forge
libcups 2.3.3 h4637d8d_4 conda-forge
libdeflate 1.23 h4ddbbb0_0 conda-forge
libdrm 2.4.124 hb9d3cd8_0 conda-forge
libedit 3.1.20250104 pl5321h7949ede_0 conda-forge
libegl 1.7.0 ha4b6fd6_2 conda-forge
libexpat 2.6.4 h5888daf_0 conda-forge
libffi 3.4.6 h2dba641_0 conda-forge
libgcc 14.2.0 h767d61c_2 conda-forge
libgcc-ng 14.2.0 h69a702a_2 conda-forge
libgfortran 14.2.0 h69a702a_2 conda-forge
libgfortran5 14.2.0 hf1ad2bd_2 conda-forge
libgl 1.7.0 ha4b6fd6_2 conda-forge
libglib 2.82.2 h2ff4ddf_1 conda-forge
libglvnd 1.7.0 ha4b6fd6_2 conda-forge
libglx 1.7.0 ha4b6fd6_2 conda-forge
libgomp 14.2.0 h767d61c_2 conda-forge
libiconv 1.18 h4ce23a2_1 conda-forge
libjpeg-turbo 3.0.0 hd590300_1 conda-forge
liblapack 3.9.0 31_h7ac8fdf_openblas conda-forge
libllvm19 19.1.7 ha7bfdaf_1 conda-forge
liblzma 5.6.4 hb9d3cd8_0 conda-forge
libnsl 2.0.1 hd590300_0 conda-forge
libntlm 1.8 hb9d3cd8_0 conda-forge
libopenblas 0.3.29 pthreads_h94d23a6_0 conda-forge
libopengl 1.7.0 ha4b6fd6_2 conda-forge
libpciaccess 0.18 hd590300_0 conda-forge
libpng 1.6.47 h943b412_0 conda-forge
libpq 17.4 h27ae623_0 conda-forge
libsqlite 3.49.1 hee588c1_1 conda-forge
libstdcxx 14.2.0 h8f9b012_2 conda-forge
libstdcxx-ng 14.2.0 h4852527_2 conda-forge
libtiff 4.7.0 hd9ff511_3 conda-forge
libuuid 2.38.1 h0b41bf4_0 conda-forge
libwebp-base 1.5.0 h851e524_0 conda-forge
libxcb 1.17.0 h8a09558_0 conda-forge
libxcrypt 4.4.36 hd590300_1 conda-forge
libxkbcommon 1.8.1 hc4a0caf_0 conda-forge
libxml2 2.13.6 h8d12d68_0 conda-forge
libxslt 1.1.39 h76b75d6_0 conda-forge
libzlib 1.3.1 hb9d3cd8_2 conda-forge
matplotlib 3.10.1 py312h7900ff3_0 conda-forge
matplotlib-base 3.10.1 py312hd3ec401_0 conda-forge
munkres 1.1.4 pyh9f0ad1d_0 conda-forge
mysql-common 9.0.1 h266115a_5 conda-forge
mysql-libs 9.0.1 he0572af_5 conda-forge
ncurses 6.5 h2d0b736_3 conda-forge
numpy 2.2.3 py312h72c5963_0 conda-forge
openjpeg 2.5.3 h5fbd93e_0 conda-forge
openldap 2.6.9 he970967_0 conda-forge
openssl 3.4.1 h7b32b05_0 conda-forge
packaging 24.2 pyhd8ed1ab_2 conda-forge
pcre2 10.44 hba22ea6_2 conda-forge
pillow 11.1.0 py312h80c1187_0 conda-forge
pip 25.0.1 pyh8b19718_0 conda-forge
pixman 0.44.2 h29eaf8c_0 conda-forge
pthread-stubs 0.4 hb9d3cd8_1002 conda-forge
pyparsing 3.2.1 pyhd8ed1ab_0 conda-forge
pyside6 6.8.2 py312h91f0f75_1 conda-forge
python 3.12.9 h9e4cc4f_1_cpython conda-forge
python-dateutil 2.9.0.post0 pyhff2d567_1 conda-forge
python_abi 3.12 5_cp312 conda-forge
qhull 2020.2 h434a139_5 conda-forge
qt6-main 6.8.2 h588cce1_0 conda-forge
readline 8.2 h8c095d6_2 conda-forge
scipy 1.15.2 py312ha707e6e_0 conda-forge
setuptools 75.8.2 pyhff2d567_0 conda-forge
six 1.17.0 pyhd8ed1ab_0 conda-forge
tk 8.6.13 noxft_h4845f30_101 conda-forge
tornado 6.4.2 py312h66e93f0_0 conda-forge
tqdm 4.67.1 pyhd8ed1ab_1 conda-forge
tzdata 2025a h78e105d_0 conda-forge
unicodedata2 16.0.0 py312h66e93f0_0 conda-forge
wayland 1.23.1 h3e06ad9_0 conda-forge
wheel 0.45.1 pyhd8ed1ab_1 conda-forge
xcb-util 0.4.1 hb711507_2 conda-forge
xcb-util-cursor 0.1.5 hb9d3cd8_0 conda-forge
xcb-util-image 0.4.0 hb711507_2 conda-forge
xcb-util-keysyms 0.4.1 hb711507_0 conda-forge
xcb-util-renderutil 0.3.10 hb711507_0 conda-forge
xcb-util-wm 0.4.2 hb711507_0 conda-forge
xkeyboard-config 2.43 hb9d3cd8_0 conda-forge
xorg-libice 1.1.2 hb9d3cd8_0 conda-forge
xorg-libsm 1.2.6 he73a12e_0 conda-forge
xorg-libx11 1.8.12 h4f16b4b_0 conda-forge
xorg-libxau 1.0.12 hb9d3cd8_0 conda-forge
xorg-libxcomposite 0.4.6 hb9d3cd8_2 conda-forge
xorg-libxcursor 1.2.3 hb9d3cd8_0 conda-forge
xorg-libxdamage 1.1.6 hb9d3cd8_0 conda-forge
xorg-libxdmcp 1.1.5 hb9d3cd8_0 conda-forge
xorg-libxext 1.3.6 hb9d3cd8_0 conda-forge
xorg-libxfixes 6.0.1 hb9d3cd8_0 conda-forge
xorg-libxi 1.8.2 hb9d3cd8_0 conda-forge
xorg-libxrandr 1.5.4 hb9d3cd8_0 conda-forge
xorg-libxrender 0.9.12 hb9d3cd8_0 conda-forge
xorg-libxtst 1.2.5 hb9d3cd8_3 conda-forge
xorg-libxxf86vm 1.1.6 hb9d3cd8_0 conda-forge
zstd 1.5.7 hb8e6e7a_1 conda-forge
And that's where I'm a bit unsure of copying/pasting this whole block inside the .py
file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I can see that what I'm asking for is a sort of hybrid between what you installed explicitly and what the environment actually contains with all specifications (see, for example: https://stackoverflow.com/a/64288844/3885713). But it's standard, e.g.: https://github.com/scikit-image/scikit-image/blob/660cdc9f6ae25eb99df03e737ea96277d6bfe026/requirements/default.txt
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Alright, thanks a lot! I was not super aware that it was standard. I will proceed with this approach and make a new commit!
Co-authored-by: Marianne Corvellec <marianne.corvellec@ens-lyon.org>
Hello! I am so sorry I was trying to understand how updating the fork would work on my side of the repo and I seem to have accidentally merged the |
@marcodallavecchia it looks like your merge of |
Thank you @tobyhodges! Lucky for me, I didn't break anything! I just pushed another commit on this branch with the incorporation of the last comments. I leave to you if you consider this a good final solution for this PR. Thanks a lot for helping me throughout the process |
Thanks for persevering, @marcodallavecchia 🙌 @datacarpentry/image-processing-curriculum-maintainers this feels to me like it is ready, but since I am no longer one of the Maintainers of the lesson I leave it to one of you to decide whether or not the time has come to push the big green merge button... |
One more point that I have been mulling over this morning, @marcodallavecchia. You wrote
but I think that merging our Often, a project maintainer will be happy to do that but in my view it is good open source etiquette for the contributor to handle merge conflicts and ensure that their branch is ready to merge. So in my opinion, merging |
Hello again @tobyhodges. What a great remark, thanks a lot for the clear explanation. I completely see the point and, of course, I would have been happy to go through potential conflicts in the merge with |
I concur; GitHub's interface 'invites' you to do so with the "Update branch" button. It's equivalent (and, hence, equally good) if you do it locally at the command line and then push. |
Thanks all! I should have time this weekend to give this a final look over, and then hopefully we can merge 😄 🎉 |
Thanks @marcodallavecchia - I had another look through, and this is looking great! 😄 |
Auto-generated via `{sandpaper}` Source : 88f3bdc Branch : md-outputs Author : GitHub Actions <actions@github.com> Time : 2025-03-28 19:42:02 +0000 Message : markdown source builds Auto-generated via `{sandpaper}` Source : fbdb1fe Branch : main Author : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Time : 2025-03-28 19:41:13 +0000 Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim Blur Animation source code and simplified output
Hello again @K-Meech! Thanks a lot for guiding me through this process and letting me contribute to the project! I hope there will be many more in the future. Excited to see this done 🎊 |
Auto-generated via `{sandpaper}` Source : 88f3bdc Branch : md-outputs Author : GitHub Actions <actions@github.com> Time : 2025-03-28 19:42:02 +0000 Message : markdown source builds Auto-generated via `{sandpaper}` Source : fbdb1fe Branch : main Author : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Time : 2025-03-28 19:41:13 +0000 Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim Blur Animation source code and simplified output
Auto-generated via `{sandpaper}` Source : 88f3bdc Branch : md-outputs Author : GitHub Actions <actions@github.com> Time : 2025-03-28 19:42:02 +0000 Message : markdown source builds Auto-generated via `{sandpaper}` Source : fbdb1fe Branch : main Author : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Time : 2025-03-28 19:41:13 +0000 Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim Blur Animation source code and simplified output
Auto-generated via `{sandpaper}` Source : 88f3bdc Branch : md-outputs Author : GitHub Actions <actions@github.com> Time : 2025-03-28 19:42:02 +0000 Message : markdown source builds Auto-generated via `{sandpaper}` Source : fbdb1fe Branch : main Author : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Time : 2025-03-28 19:41:13 +0000 Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim Blur Animation source code and simplified output
Auto-generated via `{sandpaper}` Source : 88f3bdc Branch : md-outputs Author : GitHub Actions <actions@github.com> Time : 2025-03-28 19:42:02 +0000 Message : markdown source builds Auto-generated via `{sandpaper}` Source : fbdb1fe Branch : main Author : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Time : 2025-03-28 19:41:13 +0000 Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim Blur Animation source code and simplified output
Auto-generated via `{sandpaper}` Source : 88f3bdc Branch : md-outputs Author : GitHub Actions <actions@github.com> Time : 2025-03-28 19:42:02 +0000 Message : markdown source builds Auto-generated via `{sandpaper}` Source : fbdb1fe Branch : main Author : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Time : 2025-03-28 19:41:13 +0000 Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim Blur Animation source code and simplified output
Auto-generated via `{sandpaper}` Source : 88f3bdc Branch : md-outputs Author : GitHub Actions <actions@github.com> Time : 2025-03-28 19:42:02 +0000 Message : markdown source builds Auto-generated via `{sandpaper}` Source : fbdb1fe Branch : main Author : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Time : 2025-03-28 19:41:13 +0000 Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim Blur Animation source code and simplified output
Auto-generated via `{sandpaper}` Source : 88f3bdc Branch : md-outputs Author : GitHub Actions <actions@github.com> Time : 2025-03-28 19:42:02 +0000 Message : markdown source builds Auto-generated via `{sandpaper}` Source : fbdb1fe Branch : main Author : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Time : 2025-03-28 19:41:13 +0000 Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim Blur Animation source code and simplified output
Auto-generated via `{sandpaper}` Source : 88f3bdc Branch : md-outputs Author : GitHub Actions <actions@github.com> Time : 2025-03-28 19:42:02 +0000 Message : markdown source builds Auto-generated via `{sandpaper}` Source : fbdb1fe Branch : main Author : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Time : 2025-03-28 19:41:13 +0000 Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim Blur Animation source code and simplified output
Hello everyone!
I've seen from this issue, that we were looking to implement a better blur animation figure for section 06-blurring.
I've implemented a Python script that creates this animation with Matplotlib. Here are a few points:
episodes/data/A.tif
episodes/fig/blur-demo.gif
env.yml
file for the requirementsA final extra point from my side: I'm a big believer that every output should be associated with its source-code, especially in the carpentries context where we are trying to keep things reproducible. In this case, I couldn't find the code used to create the previous version of the
blur-demo.gif
so I took the freedom to create aepisodes/files/source-code/
directory, where we could pool together all the code snippets for generating all the output that would later feed on the website (this is where my currentcreate_blur_animation.py
file is). I am unsure if this is the best place to have such folder, maybe in the root could even be better for clear reference.I hope this is helpful for the issue and course material. I am open to improve it in the near future after some feedback!