How to Write an LSB Image Steganography Project Report
A practical guide to structuring a project report on LSB image steganography, covering prerequisites, step-by-step instructions, output checks, and common problems.
Before you start
Confirm that your project actually implements least significant bit substitution in a raster image. The report should explain embedding a payload into the lowest bit or bits of pixel color channels and extracting it again. Most classroom projects work locally with a chosen programming language and image library, so no online service or account is assumed. Collect the source code, a small set of carrier images, the message or file you hid, and screenshots or command output that show the process. Record the pixel dimensions of the carrier images and the output file format because both affect capacity and visible quality.
Be careful about compression and transparency. If you used JPEG, the saved image normally passes through lossy compression and can destroy the hidden data. A workable LSB demonstration usually uses an uncompressed or lossless format such as BMP or PNG. If transparency is part of the image, describe whether the alpha channel was left unchanged or also modified. These details belong in the report rather than being treated as automatic.
Step-by-step instructions
Start the body with a short objective and scope. State that the project hides data in image pixels by replacing the least significant bits of color values. Then list the tools, language version, and libraries you used. Name the input and output file format and whether the process changes the pixel dimensions or aspect ratio. Keep this section concise; examiners usually want the method, not a general history of steganography.
Describe the embedding process
Explain the ordered procedure in your implementation. One common sequence is: open the carrier image, convert the secret data to bits, iterate over the pixel color channels in a fixed order, and write each secret bit into the least significant position. Mention whether you used red, green, and blue values in sequence and whether you skipped the alpha channel. If the message length is stored in the image, say where and how it is encoded.
secret_byte = 0b01000001
least_significant_bit = secret_byte & 1
# replace the low bit of one color channel value
channel_value = (channel_value & 0b11111110) | least_significant_bit
Describe the extraction process
Show the reverse operation as a matching ordered list. Read each pixel channel in the same order used during embedding, collect the low bit from each value, rebuild bytes, and stop after the expected message length. If the length header is required, explain how the extractor knows when to finish. Avoid vague wording such as "the software decodes the data" without showing where the bits come from.
Add the results and calculations
Include a table with the carrier file name, pixel dimensions, number of color channels used, payload size, and output file size before and after embedding. Explain capacity: if one bit is replaced in each of three color channels, a 400 by 300 pixel image can carry up to 360,000 bits before overhead. Note that the real message may be smaller and that a length header or terminator uses some of this capacity.
Check the output
Verify the embedded image opens normally in an image viewer and retains the same pixel dimensions and aspect ratio as the original. Compare the two images visually and note that very small low-bit changes are usually difficult to see in natural photographs. Also run your extraction step on the modified file and confirm that the recovered message matches the original exactly.
Do not present a visual similarity check as proof by itself. A useful report also measures the difference, for example with mean squared error or a count of changed pixel values, without inventing measurements you did not collect. If the file format changes the result, say so. A PNG saved from a lossless workflow should preserve the embedded bits; a JPEG compressed afterward may fail extraction because compression can alter the low bits.
Common problems and next steps
One frequent issue is that the same image is used for embedding and extraction but the code processes pixels in a different order. Keep the order fixed and use one traversal routine for both operations. Another problem is an off-by-one length error when the message length header is read incorrectly. Test with a short known message before using a large file.
If the hidden data disappears, check whether the image was resaved in a lossy format or resized. Resizing changes pixel values and invalidates the embedded sequence. If the carrier image uses a palette format, the approach may not apply directly because color values may be stored as palette indexes rather than full color channels. For a stronger report, mention that LSB substitution is not robust against cropping, scaling, or compression, and suggest future work such as adding encryption before embedding or measuring distortion more formally.