Filter löschen
Filter löschen

How do I fix a "Subscripted assignment dimension mismatch."

4 Ansichten (letzte 30 Tage)
amitesh kumar
amitesh kumar am 2 Feb. 2011
clc
c=1;
t=1;
% To read in the watermarked image
[watermarked_image cmap]=imread('lsb_image.bmp');
watermarked_image=double(watermarked_image);
% To measure the size of the watermarked_image
watermarked_image_size=size(watermarked_image);
x=watermarked_image_size(1);
y=watermarked_image_size(2);
z=watermarked_image_size(1);
% To convert the watermarked image from a MxN matrix into a row
for a=1:watermarked_image_size(1,1)
watermarked_image_row(1,c:z)=watermarked_image(a,1:y);
c=c+y;
z=z+y;
end
When I run it I get the following error:
??? Subscripted assignment dimension mismatch.
Error in ==> single_decode at 15
watermarked_image_row(1,c:z)=watermarked_image(a,1:y);
Can anybody help me remove this error? I am using a test image of size 256*256 and lsb_image.bmp of 12*9.

Antworten (3)

Jan
Jan am 2 Feb. 2011
There is no need to use a complicated FOR loop to get a matrix as row vector:
[watermarked, cmap] = imread('lsb_image.bmp');
watermarked = double(watermarked);
watermarked_row = reshape(transpose(watermarked), 1, numel(watermarked));
EDITED: And together with Sean de's addition: If you image is a [Width x Height x 3] 3D array, convert it to a grey scale at first:
watermarked = rgb2gray(watermarked);
Or operate on a single color channel only, e.g. red:
watermarked = rgb2gray(:, :, 1);

amitesh kumar
amitesh kumar am 2 Feb. 2011
%This program decode the watermark from the single embed watermarked image clc c=1; t=1; %To read in the watermarked image [watermarked_image cmap]=imread('lsb_image.bmp'); watermarked_image=double(watermarked_image); %To measure the size of the watermarked_image watermarked_image_size=size(watermarked_image); x=watermarked_image_size(1); z=watermarked_image_size(1); y=watermarked_image_size(2); %To convert the watermarked image from a MxN matrix into a row
[watermarked, cmap] = imread('lsb_image.bmp'); watermarked = double(watermarked); watermarked_row = reshape(transpose(watermarked), 1, numel(watermarked));
if i am directly replacing your code with previous one by removing for loop, than i am getting following error
??? Error using ==> transpose Transpose on ND array is not defined.
Error in ==> single_decode at 16 watermarked_row = reshape(transpose(watermarked), 1, numel(watermarked));
have u any idea how to remove this error..and y this error is occurring. plz help me
  1 Kommentar
Doug Hull
Doug Hull am 2 Feb. 2011
please add this as a comment to the original question or an answer. It should not be an answer by itself. You can delete it after moving it.

Melden Sie sich an, um zu kommentieren.


Sean de Wolski
Sean de Wolski am 2 Feb. 2011
probably have to do:
watermarked_image = rgb2gray(watermarked_image);
then Jan's reshape call
  3 Kommentare
Walter Roberson
Walter Roberson am 6 Feb. 2011
After the imread() statement, put in
disp(ndims(watermarked))
and tell us what it reports.
Why are you reading the same image twice? Once into watermarked_image and once into watermarked ?
Jan
Jan am 6 Feb. 2011
There are 2 kinds of gray scale images: 1. just the colors are gray, but they are saved as RGB values, 2. the JPEG has a gray scale "color" table and used index colors. As Walter suggested, you can distinguish them by inspecting the reply of IMREAD.

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by