Problem with data class when working in GUI...... plz help....

I am working in image watermarking, I m embedding a BMP image in Blue component of color image,
for ii=1:Mm
for jj=1:Nm
array2D(ii,jj) = bitget(blue_component(ii,jj),1);
save('array.mat','array2D');
watermarked_image(ii,jj)=bitset(blue_component(ii,jj),1,message1(ii,jj));
array2Dafter(ii,jj) = bitget(watermarked_image(ii,jj),1);
save('array2.mat','array2Dafter');
end
end
I m collecting the lsb of original blue panel in array2D to be inserted back later.
when i m running the code without making a GUI interface using Guide, array2D is of class uint8 while when i run some as a part of a pushbutton callback it is saved as class double, now while the second bitget after embedding is recovered same as uint8 both times,.. I want to get bLue_component as uint8 with gui.... i m not able to find the issue ...... plz plz plz help

3 个评论

How are you initializing array2D() ?
array2D = cell([Mm,Nm]); array2D=zeros(Mm,Nm);
I tried both initialization ....
and the question was reposted by mistake....
Saving array2D and array2Dafter in every iteration of the "for" loop does not seem to be efficient.

请先登录,再进行评论。

 采纳的回答

Image Analyst
Image Analyst 2012-12-22
编辑:Image Analyst 2012-12-22
You can change the class of a variable by casting it to the desired type using uint8(), logical(), or whatever class you want. It will round or clip the values to fit into the data type of the target class, e.g. 42.73 goes to 43 for uint8, 256 goes to 255 for uint8, 1 goes to true for logical, etc.
Perhaps you'd be interested in my demo that does LSB watermarking. Let me know and I'll post it.

6 个评论

sure...sir .... plz post, ur demo of lsb watermarking... I just want that.... in whatever image i ... do watermarking.. on recovery i get 100% original image i watermarked .... means .. its lsb must be set back to older one...
% Demo to watermark an image by hiding another image in a certain bit
% plane. Sometimes called "LSB Watermarking" or something similar.
% User is asked which bit plane they want to hide the image in.
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
imtool close all; % Close all imtool figures.
clear; % Erase all existing variables.
workspace; % Make sure the workspace panel is showing.
fontSize = 12;
% Read in the image what will have another image hidden into it.
baseFileName='moon.tif';
% baseFileName='cameraman.tif';
folder = fullfile(matlabroot, '\toolbox\images\imdemos');
% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);
if ~exist(fullFileName, 'file')
% Didn't find it there. Check the search path for it.
fullFileName = baseFileName; % No path this time.
if ~exist(fullFileName, 'file')
% Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist.', fullFileName);
uiwait(warndlg(errorMessage));
return;
end
end
originalImage = imread(fullFileName);
% Get the number of rows and columns in the original image.
[visibleRows visibleColumns numberOfColorChannels] = size(originalImage);
if numberOfColorChannels > 1
% If it's color, extract the red channel.
originalImage = originalImage(:,:,1);
end
% Display the original gray scale image.
subplot(3, 3, 4);
imshow(originalImage, []);
title('Original Grayscale Starting Image', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
set(gcf,'name','Demo by ImageAnalyst','numbertitle','off')
% read the message image you want to hide in the cover image
baseFileName='cameraman.tif';
% baseFileName='moon.tif';
% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);
if ~exist(fullFileName, 'file')
% Didn't find it there. Check the search path for it.
fullFileName = baseFileName; % No path this time.
if ~exist(fullFileName, 'file')
% Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist.', fullFileName);
uiwait(warndlg(errorMessage));
return;
end
end
hiddenImage = imread(fullFileName);
% Get the number of rows and columns in the hidden image.
[hiddenRows hiddenColumns numberOfColorChannels] = size(hiddenImage);
if numberOfColorChannels > 1
% If it's color, extract the red channel.
hiddenImage = hiddenImage(:,:,1);
end
% Display the image.
subplot(3, 3, 1);
imshow(hiddenImage, []);
title('Image to be Hidden', 'FontSize', fontSize);
% Let's compute and display the histogram.
[pixelCount grayLevels] = imhist(hiddenImage);
subplot(3, 3, 2);
bar(pixelCount);
title('Histogram of image to be hidden', 'FontSize', fontSize);
xlim([0 grayLevels(end)]); % Scale x axis manually.
grid on;
thresholdValue = 70;
binaryImage = hiddenImage < thresholdValue;
% Display the image.
subplot(3, 3, 3);
imshow(binaryImage, []);
caption = sprintf('Hidden Image Thresholded at %d', thresholdValue);
title(caption, 'FontSize', fontSize);
% Get the bit plane to hide the image in.
prompt = 'Enter the bit plane you want to hide the image in (1 - 8) ';
dialogTitle = 'Enter Bit Plane to Replace';
numberOfLines = 1;
defaultResponse = {'6'};
bitToSet = str2double(cell2mat(inputdlg(prompt, dialogTitle, numberOfLines, defaultResponse)));
% If image to be hidden is bigger than the original image, scale it down.
if hiddenRows > visibleRows || hiddenColumns > visibleColumns
amountToShrink = min([visibleRows / hiddenRows, visibleColumns / hiddenColumns]);
binaryImage = imresize(binaryImage, amountToShrink);
% Need to update the number of rows and columns.
[hiddenRows hiddenColumns] = size(binaryImage);
end
% Tile the hiddenImage, if it's smaller, so that it will cover the original image.
if hiddenRows < visibleRows || hiddenColumns < visibleColumns
watermark = zeros(size(originalImage), 'uint8');
for column = 1:visibleColumns
for row = 1:visibleRows
watermark(row, column) = binaryImage(mod(row,hiddenRows)+1, mod(column,hiddenColumns)+1);
end
end
% Crop it to the same size as the original image.
watermark = watermark(1:visibleRows, 1:visibleColumns);
else
% Watermark is the same size as the original image.
watermark = binaryImage;
end
% Display the thresholded binary image - the watermark alone.
subplot(3, 3, 5);
imshow(watermark, []);
caption = sprintf('Hidden Image\nto be Inserted into Bit Plane %d', bitToSet);
title(caption, 'FontSize', fontSize);
% Set the bit of originalImage(a copy, actually) to the value of the watermark.
watermarkedImage = originalImage; % Initialize
for column = 1 : visibleColumns
for row = 1 : visibleRows
watermarkedImage(row, column) = bitset(originalImage(row, column), bitToSet, watermark(row, column));
end
end
% Display the image.
subplot(3, 3, 6);
imshow(watermarkedImage, []);
caption = sprintf('Final Watermarked Image\nwithout added Noise');
title(caption, 'FontSize', fontSize);
% add noise to watermarked image
noisyWatermarkedImage = imnoise(watermarkedImage,'gaussian', 0, 0.0005);
% Display the image.
subplot(3, 3, 7);
imshow(noisyWatermarkedImage, []);
caption = sprintf('Watermarked Image\nwith added Noise');
title(caption, 'FontSize', fontSize);
%====================================================================================
% Now let's pretend we are starting with the watermarked noisy corrupted image.
% We want to recover the watermark.
% Use the known bitplane of watermarked image to recover the watermark.
recoveredWatermark = zeros(size(noisyWatermarkedImage));
recoveredNoisyWatermark = zeros(size(noisyWatermarkedImage));
for column = 1:visibleColumns
for row = 1:visibleRows
recoveredWatermark(row, column) = bitget(watermarkedImage(row, column), bitToSet);
recoveredNoisyWatermark(row, column) = bitget(noisyWatermarkedImage(row, column), bitToSet);
end
end
% Scale the recovered watermark to 0=255
recoveredWatermark = uint8(255 * recoveredWatermark);
recoveredNoisyWatermark = uint8(255 * recoveredNoisyWatermark);
% Display the images.
subplot(3, 3, 8);
imshow(recoveredWatermark, []);
caption = sprintf('Watermark Recovered\nfrom Bit Plane %d of\nNoise-Free Watermarked Image', bitToSet);
title(caption, 'FontSize', fontSize);
% Display the images.
subplot(3, 3, 9);
imshow(recoveredNoisyWatermark, []);
caption = sprintf('Watermark Recovered\nfrom Bit Plane %d of\nNoisy Watermarked Image', bitToSet);
title(caption, 'FontSize', fontSize);
msgbox('Done with demo!');
sir, what happens to lsb of original image..... like once we have inserted the watermark, its original bits are replaced, then we recover the watermark, so we cannot say.... image is 100% same, unless, we recover its older bits, that where before embedding.
That's correct. Usually it's the hidden watermark that you want to retrieve because you want to detect if someone stole your image. You don't care about the image that you put out there (on your web site or wherever) because you have the original safely archived. You're just interested in knowing if an image which you found out there is a copy of your image. The thief would not know that the watermark is there but you would be able to detect it and know if the image was taken from your web site.
thnk you ...... thats the reason .... i was seeking for .....
So have all your questions been answered or not? Mark as answered if you're done.

请先登录,再进行评论。

更多回答(1 个)

array2D = zeros(Mm, Nm, 'uint8');

3 个评论

sir, may be, I m not able to put question correctly....
okay like when i m opening array2D in matlab workspace it is opening still as < MmXNm X double> with gui and workspace consist of sequence of 0 and 1, while if I run same without GUI it opens in workspace as < Mm X Nm X uint8> and 0,1 sequence is different from gui one.... even though i try to work with double bit , then at recovery time ... and try to set the bit back i m not getting correct result,
How are you opening the array2D ?
What does
whos -file array.mat
show?
array2D 64x128 65536 double global when part of gui
array2D1 64x128 8192 uint8 when not part of gui

请先登录,再进行评论。

Community Treasure Hunt

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

Start Hunting!

Translated by