Your video is really interessting and well explained. I would have loved to see what the encoding looked like by showing the red channel only like you did at 4:44 but with the original image and the altered image.
Thank you! And thank you for this suggestion! I updated the notebook here to show this: ctraliedotcom.github.io/basicimageprocessing/LSBImgSteg.html and I gave you a shoutout
Nice video on an interesting topic! Image compression was one of the first things that came to my mind at the beginning, nice that you covered it in the end. I think you don't need to encode the null terminator explicitly in this case, because the rest of the image is zeroes anyway, no?
Thank you so much! You are absolutely right that I've already made everything 0's after the message, so the null terminator is not needed. Well spotted! What I probably should have done is keep all of the pixels intact that don't need to store the message. In that case I would require the null terminator
Hi Chris, Absolutely great video that is easy to follow through. How can you embed information so that it remains intact even after the image undergoes manipulations like resizing, cropping, or compression? Any best practices or examples? Thanks !
Awesome, glad you got so much out of it! Wow this is a great question. So yeah, this LSB technique would completely fail under these kinds of images operations. For a recent paper that hides information that's robust to the sorts of transformations you're talking about, checkout this paper openaccess.thecvf.com/content_ECCV_2018/papers/Jiren_Zhu_HiDDeN_Hiding_Data_ECCV_2018_paper.pdf figure 4 talks about a neat trick to make it robust to compression, which is one of the hardest transformations to deal with an even more recent paper that got a lot of press is Glaze: people.cs.uchicago.edu/~ravenben/publications/pdf/glaze-usenix23.pdf Both of these are significantly more sophisticated than LSB though! I'd have to think if there's a simpler hand crafted way to make something more robust
Ah okay, so perhaps "IRound"; I should have called it "IEven". What I was doing there was getting rid of the least significant bit of all pixels to give the image a clean slate to put data into. So after the step IRound = I - I%2, the image IRound has all even numbers. Since all even numbers are 0's, this is like starting with all 0's. But we can add 1 to some of them if we want to store a 1. Does that make sense?
the way you explain RGB so precisely in just 10 seconds is so killer
Thank you Gus! It's good to know that this way of explaining it works!
Thank you, Chris! This tutorial has been such a great resource!
I'm so glad to hear that, thanks for watching!
Your video is really interessting and well explained. I would have loved to see what the encoding looked like by showing the red channel only like you did at 4:44 but with the original image and the altered image.
Thank you! And thank you for this suggestion! I updated the notebook here to show this:
ctraliedotcom.github.io/basicimageprocessing/LSBImgSteg.html
and I gave you a shoutout
Love it! Dot product was a cool trick for decoding
Yes, numpy at its finest! I'm glad I actually decided to do that out manually
Nice video on an interesting topic! Image compression was one of the first things that came to my mind at the beginning, nice that you covered it in the end. I think you don't need to encode the null terminator explicitly in this case, because the rest of the image is zeroes anyway, no?
Thank you so much! You are absolutely right that I've already made everything 0's after the message, so the null terminator is not needed. Well spotted! What I probably should have done is keep all of the pixels intact that don't need to store the message. In that case I would require the null terminator
Hi Chris, Absolutely great video that is easy to follow through. How can you embed information so that it remains intact even after the image undergoes manipulations like resizing, cropping, or compression? Any best practices or examples? Thanks !
Awesome, glad you got so much out of it!
Wow this is a great question. So yeah, this LSB technique would completely fail under these kinds of images operations. For a recent paper that hides information that's robust to the sorts of transformations you're talking about, checkout this paper
openaccess.thecvf.com/content_ECCV_2018/papers/Jiren_Zhu_HiDDeN_Hiding_Data_ECCV_2018_paper.pdf
figure 4 talks about a neat trick to make it robust to compression, which is one of the hardest transformations to deal with
an even more recent paper that got a lot of press is Glaze:
people.cs.uchicago.edu/~ravenben/publications/pdf/glaze-usenix23.pdf
Both of these are significantly more sophisticated than LSB though! I'd have to think if there's a simpler hand crafted way to make something more robust
Hi i'm confused about the part why do we have to round down the image?
Ah okay, so perhaps "IRound"; I should have called it "IEven". What I was doing there was getting rid of the least significant bit of all pixels to give the image a clean slate to put data into. So after the step IRound = I - I%2, the image IRound has all even numbers. Since all even numbers are 0's, this is like starting with all 0's. But we can add 1 to some of them if we want to store a 1. Does that make sense?
facinating
Thanks for watching!