Error in Matlab Code

2 vues (au cours des 30 derniers jours)
marie lasz
marie lasz le 14 Déc 2020
Commenté : Image Analyst le 18 Déc 2020
I am getting error in this code at line 13 '', 'Index in position 2 exceeds array bounds (must not exceed 512). Looking for the solution.Thanks in advance
clear all;
M=512;
N=512;
K=8;
A=imread('lena2.jpg');
A=rgb2gray(A);
A=imresize(A,[512,512]);
b=imread('Watermarked_Image.jpg');
for p=1:N
for q=1:N
x=(p-1)*K+1;
y=(q-1)*K+1;
BLOCK1=A(x:x+K-1,y:y+K-1);
BLOCK2=b(x:x+K-1,y:y+K-1);
BLOCK1=idct2(BLOCK1);
BLOCK2=idct2(BLOCK2);
if BLOCK1(1,1)~=0
a=(BLOCK2(1,1)/BLOCK1(1,1))-1;
if a<0
W(p,q)=0;
else
W(p,q)=1;
end
end
end
end
subplot(2,2,1);
imshow(W);
title('the extracted watermark image');
imwrite(W,'w1.jpg','jpg');
'

Réponse acceptée

Image Analyst
Image Analyst le 14 Déc 2020
Matrices are indexed (row, column), which is (y, x), NOT (x,y) as you have it.
Also check the limits of your for loop to make sure you don't step outside the image.
Attach your 2 images if you still need help so we can run your code.
  9 commentaires
marie lasz
marie lasz le 18 Déc 2020
well thanks for your help. I changed thre code and also changed the criteria of insertion from multiplicative to additive formula. But in the end I don't know why am I getting flipped image in extraction . I am thinking to apply flip function but really don't know why it is actually flipping? Plus if I am putting threshold or you can say alpha value less than and greater to 1 then it is not working properly but if put lets say 30 then it is working fine. I cannot put the code online here due to some reasons. But any kind suggestions will be helpful to me.
Image Analyst
Image Analyst le 18 Déc 2020
Not sure without delving into it much more than I have time for. I notice that your're using x and y and a lot of novices confuse x and y with row and column. They do NOT correspond like that.
Matrixes are indexed M(row, column) which is M(y, x), NOT M(x,y) so make sure all that is correct. I saw for W you're using p as the first index which is derived from x, so that's not right in general but would be okay for a perfectly square matrix. And you're using x as the first index for A instead of y.

Connectez-vous pour commenter.

Plus de réponses (1)

Cris LaPierre
Cris LaPierre le 14 Déc 2020
Error is in this line of code:
BLOCK1=A(x:x+K-1,y:y+K-1);
"Index in position 2 exceeds array bounds (must not exceed 512)"
Position 2 corresponds to your second index: y:y+K-1
Apparently A is a mx512 array. You define y as y=(q-1)*K+1; At its largest value (q=512, K=8), y is 511*8+1, which is >> 512.
You likely need to rethink your approach.
  1 commentaire
marie lasz
marie lasz le 14 Déc 2020
thanks for your answer, yes it is going outside the array.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Computer Vision with Simulink dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by