# I am getting an error in watermark extraction.. actually extracted watermark is showing blank image. please help me with this code.. thank you

1 view (last 30 days)
Suniti Singh on 30 May 2023
Commented: Image Analyst on 31 May 2023
% Step 1: Read the original color image OI of size N x N
OI = uint8(imresize(OI, [512 512]));
% Step 2: Select the Red color component from the original image
color_component = OI(:, :, 1); % Red color component
% Step 3: Apply DWT to decompose the color component into LL, HL, LH, and HH sub-bands
[LL, HL, LH, HH] = dwt2(color_component, 'haar');
% Step 4: Apply DWT to the LL sub-band to decompose it further
[LL_LL, LL_HL, LL_LH, LL_HH] = dwt2(LL, 'haar');
% Step 5: Apply DCT to the LL_HH sub-band and obtain the DCT coefficient matrix B
B = dct2(LL_HH);
% Step 6: Apply SVD to B and obtain U, S, and V
[U, S, V] = svd(B);
% Step 7: Read the watermark image OW of size N/2 x N/2
OW = uint8(imresize(OW, [256 256]));
OW = OW(:, :, 1); % Red color component
% Step 8: Apply DWT to decompose the watermark image into WLL, WHL, WLH, and WHH sub-bands
[WLL, WHL, WLH, WHH] = dwt2(OW, 'haar');
% Step 9: Apply DCT to the WHH sub-band and obtain the DCT coefficient matrix D
D = dct2(WHH);
% Step 10: Apply SVD to D and obtain U1, S1, and V1
[U1, S1, V1] = svd(D);
% Step 11: Modify S with the watermark by calculating S2 = S + alpha * S1
alpha = 0.01; % Modify the value of alpha as needed
S2 = S + alpha * S1;
% Step 12: Obtain B* using B* = U * S2 * V'
B_modified = U * S2 * V';
% Step 13: Apply inverse DCT to B* to produce the modified LL_HH* sub-band
LL_HH_modified = idct2(B_modified);
% Step 14: Apply inverse DWT to LL_LL, LL_HL, LL_LH, and LL_HH* to get the modified LL* sub-band
LL_modified = idwt2(LL_LL, LL_HL, LL_LH, LL_HH_modified, 'haar');
% Step 15: Apply inverse DWT to LL*, HL, LH, and HH to get the watermarked image
WI = idwt2(LL_modified, HL, LH, HH, 'haar');
% Step 16: Set the modified color component to the original image
OI_watermarked = OI;
OI_watermarked(:, :, 1) = WI; % Replace the Red component with the watermarked component
% Display and save the watermarked image
figure;
imshow(OI_watermarked);
title('Watermarked Image');
imwrite(OI_watermarked, 'watermarked_image.jpg');
% Step 1: Read the watermarked image
% Step 2: Select the Red color component from the watermarked image
color_component_watermarked = OI_watermarked(:, :, 1); % Red color component
% Step 3: Apply DWT to decompose the color component into LL, HL, LH, and HH sub-bands
[LL_watermarked, HL_watermarked, LH_watermarked, HH_watermarked] = dwt2(color_component_watermarked, 'haar');
% Step 4: Apply DWT to the LL sub-band to decompose it further
[LL_LL_watermarked, LL_HL_watermarked, LL_LH_watermarked, LL_HH_watermarked] = dwt2(LL_watermarked, 'haar');
% Step 5: Select the LL_HH* band and apply DCT to it to obtain the DCT coefficient matrix A
A = dct2(LL_HH_watermarked);
% Step 6: Apply SVD to A and obtain WU, WS, and WV
[WU, WS, WV] = svd(A);
% Step 7: Calculate Sr by subtracting the original singular values WS from S
Sr = (S - WS) / alpha;
% Step 8: Obtain Wr using Wr = U1 * Sr * V1'
Wr = U1 * Sr * V1';
% Step 9: Apply inverse DCT to Wr to produce the extracted LL_HH* sub-band
LL_HH_extracted = idct2(Wr);
% Step 10: Apply inverse DWT to LL_LL_watermarked, LL_HL_watermarked, LL_LH_watermarked, and LL_HH_extracted to get the extracted LL* sub-band
LL_extracted = idwt2(LL_LL_watermarked, LL_HL_watermarked, LL_LH_watermarked, LL_HH_extracted, 'haar');
% Step 11: Apply inverse DWT to LL_extracted, HL_watermarked, LH_watermarked, and HH_watermarked to get the extracted watermarked image
OW_extracted = idwt2(LL_extracted, HL_watermarked, LH_watermarked, HH_watermarked, 'haar');
% Set the extracted watermark to the original watermark size
extracted_watermark = imresize(OW_extracted, [256 256]);
% Display the extracted watermark image
figure;
imshow(extracted_watermark);
title('Extracted Watermark');
% Save the extracted watermark image
imwrite(extracted_watermark, 'extracted_watermark.jpg');

Image Analyst on 30 May 2023
Looks like it requires teh Wavelet toolbox, which I don't have. Is extracted_watermark floating point? If so, try this:
imshow(extracted_watermark, []);
Image Analyst on 31 May 2023
Sorry, I don't have the wavelet toolbox, and I can't really debug or examine variables if I run the code here in answers.
% Step 1: Read the original color image OI of size N x N
OI = uint8(imresize(OI, [512 512]));
% Step 2: Select the Red color component from the original image
color_component = OI(:, :, 1); % Red color component
% Step 3: Apply DWT to decompose the color component into LL, HL, LH, and HH sub-bands
[LL, HL, LH, HH] = dwt2(color_component, 'haar');
% Step 4: Apply DWT to the LL sub-band to decompose it further
[LL_LL, LL_HL, LL_LH, LL_HH] = dwt2(LL, 'haar');
% Step 5: Apply DCT to the LL_HH sub-band and obtain the DCT coefficient matrix B
B = dct2(LL_HH);
% Step 6: Apply SVD to B and obtain U, S, and V
[U, S, V] = svd(B);
% Step 7: Read the watermark image OW of size N/2 x N/2
OW = uint8(imresize(OW, [256 256]));
OW = OW(:, :, 1); % Red color component
% Step 8: Apply DWT to decompose the watermark image into WLL, WHL, WLH, and WHH sub-bands
[WLL, WHL, WLH, WHH] = dwt2(OW, 'haar');
% Step 9: Apply DCT to the WHH sub-band and obtain the DCT coefficient matrix D
D = dct2(WHH);
% Step 10: Apply SVD to D and obtain U1, S1, and V1
[U1, S1, V1] = svd(D);
% Step 11: Modify S with the watermark by calculating S2 = S + alpha * S1
alpha = 0.01; % Modify the value of alpha as needed
S2 = S + alpha * S1;
% Step 12: Obtain B* using B* = U * S2 * V'
B_modified = U * S2 * V';
% Step 13: Apply inverse DCT to B* to produce the modified LL_HH* sub-band
LL_HH_modified = idct2(B_modified);
% Step 14: Apply inverse DWT to LL_LL, LL_HL, LL_LH, and LL_HH* to get the modified LL* sub-band
LL_modified = idwt2(LL_LL, LL_HL, LL_LH, LL_HH_modified, 'haar');
% Step 15: Apply inverse DWT to LL*, HL, LH, and HH to get the watermarked image
WI = idwt2(LL_modified, HL, LH, HH, 'haar');
% Step 16: Set the modified color component to the original image
OI_watermarked = OI;
OI_watermarked(:, :, 1) = WI; % Replace the Red component with the watermarked component
% Display and save the watermarked image
figure;
imshow(OI_watermarked);
title('Watermarked Image');
imwrite(OI_watermarked, 'watermarked_image.jpg');
% Step 1: Read the watermarked image
% Step 2: Select the Red color component from the watermarked image
color_component_watermarked = OI_watermarked(:, :, 1); % Red color component
% Step 3: Apply DWT to decompose the color component into LL, HL, LH, and HH sub-bands
[LL_watermarked, HL_watermarked, LH_watermarked, HH_watermarked] = dwt2(color_component_watermarked, 'haar');
% Step 4: Apply DWT to the LL sub-band to decompose it further
[LL_LL_watermarked, LL_HL_watermarked, LL_LH_watermarked, LL_HH_watermarked] = dwt2(LL_watermarked, 'haar');
% Step 5: Select the LL_HH* band and apply DCT to it to obtain the DCT coefficient matrix A
A = dct2(LL_HH_watermarked);
% Step 6: Apply SVD to A and obtain WU, WS, and WV
[WU, WS, WV] = svd(A);
% Step 7: Calculate Sr by subtracting the original singular values WS from S
Sr = (S - WS) / alpha;
% Step 8: Obtain Wr using Wr = U1 * Sr * V1'
Wr = U1 * Sr * V1';
% Step 9: Apply inverse DCT to Wr to produce the extracted LL_HH* sub-band
LL_HH_extracted = idct2(Wr);
% Step 10: Apply inverse DWT to LL_LL_watermarked, LL_HL_watermarked, LL_LH_watermarked, and LL_HH_extracted to get the extracted LL* sub-band
LL_extracted = idwt2(LL_LL_watermarked, LL_HL_watermarked, LL_LH_watermarked, LL_HH_extracted, 'haar');
% Step 11: Apply inverse DWT to LL_extracted, HL_watermarked, LH_watermarked, and HH_watermarked to get the extracted watermarked image
OW_extracted = idwt2(LL_extracted, HL_watermarked, LH_watermarked, HH_watermarked, 'haar');
% Set the extracted watermark to the original watermark size
extracted_watermark = imresize(OW_extracted, [256 256]);
% Display the extracted watermark image
figure;
whos extracted_watermark
Name Size Bytes Class Attributes extracted_watermark 256x256 524288 double
imshow(extracted_watermark, []);
title('Extracted Watermark');
% Save the extracted watermark image
imwrite(extracted_watermark, 'extracted_watermark.jpg');

### Categories

Find more on Watermarking in Help Center and File Exchange

R2015a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!