Filter löschen
Filter löschen

How to loop on a data cube of an image

4 Ansichten (letzte 30 Tage)
Rawan hamdi
Rawan hamdi am 7 Apr. 2013
Hi, I'm trying to calculate gradient at each pixel in a data cube of an image an i'm getting this error "index out of bounds because size(X)=[280,307,191]."
Any help would be much appreciated Thank you
  2 Kommentare
Walter Roberson
Walter Roberson am 7 Apr. 2013
We are going to need to see some of your code.
Rawan hamdi
Rawan hamdi am 8 Apr. 2013
Bearbeitet: Walter Roberson am 8 Apr. 2013
Okay,here's my code below:
close all
Bands =191; %no of bands
pixels =280*307; %no of pixels
SIZE = [280,307 ,191]; %WxHxBands
lam = 0.063;
B=12;
X0 = multibandread('dc.tif', SIZE, 'int16',1252*2, 'bsq', 'ieee-le');
%adding noise
std_n=40; var_noise=std_n^2; % Gaussian noise standard deviation
reduced_pw = 1.5*var_noise; % power to reduce in first phase
std_n=sqrt(var(X0(:)));
Xn = randn(size(X0))*std_n; %noise
X = X0 + Xn; %Noisy Image
%looping on datacube
x = (X(1,:,1));
y = (X(:,1,1));
bands = X(1,1,:);
for i = 1:1: x
for j = 1:1: y
for k = 1 :1:bands
current_grad(i,j,k) = gradient(i,j,k);
end
end
end

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Image Analyst
Image Analyst am 7 Apr. 2013
Somewhere in your code where you're indexing x, y, and z, the value(s) of at least one of those indexes is greater than 280, 307, and 191, respectively.
  2 Kommentare
Rawan hamdi
Rawan hamdi am 8 Apr. 2013
Okay and how to fix this? Thank you
Image Analyst
Image Analyst am 8 Apr. 2013
Bearbeitet: Image Analyst am 8 Apr. 2013
You will be using the debugger. Go here if you don't know how yet: http://blogs.mathworks.com/videos/2012/07/03/debugging-in-matlab/

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Walter Roberson
Walter Roberson am 8 Apr. 2013
You establish x, y, and bands according to the content of the noisy image, but then your triple nested for loop has you looping using those values as indices, such as in
for i = 1:1: x
Question: in your line
current_grad(i,j,k) = gradient(i,j,k);
is "gradient" the gradient function? If so then why are you applying the function to the indices i, j, k, rather than to the content of the image? And does it make sense to be applying the gradient function only to a point at a time?
  8 Kommentare
Walter Roberson
Walter Roberson am 8 Apr. 2013
Which MATLAB version are you using? And are you using the Student license?
Image Analyst
Image Analyst am 8 Apr. 2013
I cannot help you do the upgrade. You'll have to contact the Mathworks to do that.

Melden Sie sich an, um zu kommentieren.


Rawan hamdi
Rawan hamdi am 8 Apr. 2013
Bearbeitet: Walter Roberson am 8 Apr. 2013
I've tried this:
x= squeeze(X(1,:,1));
y =squeeze(X(:,1,1));
b = X(1,1,:);
for i=1:x
for j =1 : y
for k = 1 :191
G = gradient(1:i,1:j,1:k);
end
end
end
but it keeps telling me 'Index exceeds matrix dimensions'
  2 Kommentare
Walter Roberson
Walter Roberson am 8 Apr. 2013
You establish x, and y according to the content of the noisy image, but then your triple nested for loop has you looping using those values as indices.
Also, you are overwriting G in each iteration of the triple-nested loop.
Rawan hamdi
Rawan hamdi am 8 Apr. 2013
Okay , could you help me fix the code?

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