I'm doing a college project about digital image steganography on MATLAB. So far i've been able to get the help i needed from cool guys on stackoverflow but i now need to make my algorithm more hard to detect. This is what i have so far:
My main function reads 4 grayscale RGB 24-bit images and one RGB 24-bit image to encode the four images into. The first two are supposed to be blueprints and the other two are images containing only text (in large size). All the images are of the same size.
Before encoding, the pixel positions of each grayscale image are randomly shuffled by (eg: the 1st pixel becomes the 24th pixel, the second pixel becomes the 300th pixel) this is done by generating a random permutation of numbers that represent the new pixel positions using a seed. This is done to make the code harder to crack to an outsider and the seed will act as a password that would be needed at the receiving end to recover the images.
The first shuffled grayscale image is encoded into the R plane of the RGB image, and the second shuffled image is encoded into the G plane. This is done by testing each pixel in each image eg: pixel in position (x,y): if black-->make lsb of the pixel in position (x,y) in the chosen plane =0. if white-->make lsb of the pixel=1.
The other two shuffled grayscale images that contain text only are combined to form one grayscale image by choosing a chessboard-like patter of pixel positions of the first and the complement pattern of the second. And the resulting grayscale image is encoded into the B plane of the RGB image same as done to the first two. And this is done in that way because you don't need much details to be able to read a text but you do need details to be able to make out a blueprint, the recovered text grayscales will be a little distorted but they'll be readable. Now the process encoding is done and S/N ratio is calculated for the resulting encoded RGB image to measure the difference from the original RGB image and in result the difference is not noticeable to the untrained eye.
Recovering the grayscale images is done by reversing the operations done to the encoded RGB image in reverse order.
So there you go. I'm now looking for a way to make my code way more harder to detect and crack. Maybe using Wavelet Transform? I've been reading on that for a while but i don't now how that would work for my project.