Info

This question is closed. Reopen it to edit or answer.

Index in position 1 is invalid. Array indices must be positive integers or logical values.

3 views (last 30 days)
This question was flagged by dpb
Hi. following mistake message:
Index in position 1 is invalid. Array indices must be positive integers or logical values.
Error in Laser_V2_Bersin_Sven (line 85)
new_roi = filtered(Schwerpunkte_X(i) - delta_x(i) : Schwerpunkte_X(i) + delta_x(i), Schwerpunkte_Y(i) - delta_y(i) : Schwerpunkte_Y(i) + delta_y(i));
here is the code:
for j = 1 : length(name)
delta_x(i) = 1.5.*dx(i,1);
delta_y(i) = 1.5.*dy(i,1);
new_roi = filtered(Schwerpunkte_X(i) - delta_x(i) : Schwerpunkte_X(i) + delta_x(i), Schwerpunkte_Y(i) - delta_y(i) : Schwerpunkte_Y(i) + delta_y(i));
structROI(i).ROI= new_roi;
new_ROIdiff = [1,1];
new_ROIoffset =[0, 0];
en_density = sum(sum((new_roi)));
[row,column] = size(new_roi);
xv = (1:column);
yv = (1:row).';
first_Moment_X(j,1) = sum(xv .* new_roi, 'all');
Schwerp_X = first_Moment_X(j) / en_density;
Schwerpunkte_X(j) = Schwerp_X;
first_Moment_Y(j,1) = sum(yv .* new_roi, 'all');
Schwerp_Y = first_Moment_Y(j) / en_density;
Schwerpunkte_Y(j) = Schwerp_Y;
sec_Moment_X(j,1) = sum((xv - Schwerp_X).^2 .* new_roi, 'all');
Sigma_X_plural(j) = sec_Moment_X(j)/en_density;
sec_Moment_Y(j,1) = sum((yv - Schwerp_Y).^2 .* new_roi, 'all');
Sigma_Y_plural(j) = sec_Moment_Y(j) / en_density;
sec_Moment_XY(j,1) = sum((xv - Schwerp_X) .* (yv - Schwerp_Y) .* new_roi, 'all');
Sigma_XY_plural(j) = sec_Moment_XY(j) / en_density;
%Berechnung des Strahldurchmessers nach Formel 18 und 19 in Norm
dxPixel(j) = 2*sqrt(2)*(sqrt(Sigma_X_plural(j) + Sigma_Y_plural(j)+sign(Sigma_X_plural(j)-Sigma_Y_plural(j)).*(sqrt(((Sigma_X_plural(j)-Sigma_Y_plural(j)).^2)+4*(Sigma_XY_plural(j).^2)))));
dyPixel(j) = 2*sqrt(2)*(sqrt(Sigma_X_plural(j) + Sigma_Y_plural(j)-sign(Sigma_X_plural(j)-Sigma_Y_plural(j)).*(sqrt(((Sigma_X_plural(j)-Sigma_Y_plural(j)).^2)+4*(Sigma_XY_plural(j).^2)))));
dx(j,1) = dxPixel(j) * Pixelgroesse; %Umrechnung von Pixel in Mikrometer
dy(j,1) = dyPixel(j) * Pixelgroesse; %Umrechnung von Pixel in Mikrometer
dz(j,1) = zaxe; %Nur um alles am selben Fleck zu haben
endfor j = 1 : length(name)
delta_x(i) = 1.5.*dx(i,1);
delta_y(i) = 1.5.*dy(i,1);
new_roi = filtered(Schwerpunkte_X(i) - delta_x(i) : Schwerpunkte_X(i) + delta_x(i), Schwerpunkte_Y(i) - delta_y(i) : Schwerpunkte_Y(i) + delta_y(i));
structROI(i).ROI= new_roi;
new_ROIdiff = [1,1];
new_ROIoffset =[0, 0];
en_density = sum(sum((new_roi)));
[row,column] = size(new_roi);
xv = (1:column);
yv = (1:row).';
first_Moment_X(j,1) = sum(xv .* new_roi, 'all');
Schwerp_X = first_Moment_X(j) / en_density;
Schwerpunkte_X(j) = Schwerp_X;
first_Moment_Y(j,1) = sum(yv .* new_roi, 'all');
Schwerp_Y = first_Moment_Y(j) / en_density;
Schwerpunkte_Y(j) = Schwerp_Y;
sec_Moment_X(j,1) = sum((xv - Schwerp_X).^2 .* new_roi, 'all');
Sigma_X_plural(j) = sec_Moment_X(j)/en_density;
sec_Moment_Y(j,1) = sum((yv - Schwerp_Y).^2 .* new_roi, 'all');
Sigma_Y_plural(j) = sec_Moment_Y(j) / en_density;
sec_Moment_XY(j,1) = sum((xv - Schwerp_X) .* (yv - Schwerp_Y) .* new_roi, 'all');
Sigma_XY_plural(j) = sec_Moment_XY(j) / en_density;
%Berechnung des Strahldurchmessers nach Formel 18 und 19 in Norm
dxPixel(j) = 2*sqrt(2)*(sqrt(Sigma_X_plural(j) + Sigma_Y_plural(j)+sign(Sigma_X_plural(j)-Sigma_Y_plural(j)).*(sqrt(((Sigma_X_plural(j)-Sigma_Y_plural(j)).^2)+4*(Sigma_XY_plural(j).^2)))));
dyPixel(j) = 2*sqrt(2)*(sqrt(Sigma_X_plural(j) + Sigma_Y_plural(j)-sign(Sigma_X_plural(j)-Sigma_Y_plural(j)).*(sqrt(((Sigma_X_plural(j)-Sigma_Y_plural(j)).^2)+4*(Sigma_XY_plural(j).^2)))));
dx(j,1) = dxPixel(j) * Pixelgroesse; %Umrechnung von Pixel in Mikrometer
dy(j,1) = dyPixel(j) * Pixelgroesse; %Umrechnung von Pixel in Mikrometer
dz(j,1) = zaxe; %Nur um alles am selben Fleck zu haben
end
Schwerpunkte_X(i) is defined as:
first_Moment_X(i,1) = sum(xv .* ROI, 'all');
Schwerp_X = first_Moment_X(i) / en_density;
Schwerpunkte_X(i) = Schwerp_X;
can anyone help me please?
  2 Comments
John D'Errico
John D'Errico on 30 Apr 2022
That is NOT all of your code. That is only a part of your code, so nobody can try to execute it. Worse, that same line appears twice in your code, so we don't even know which of those two lines is causing the problem. And since we don't have your complete code, we have no idea which one is line 85.
Learn to use the debugger.
Bersin Tekmen
Bersin Tekmen on 30 Apr 2022
Hi @John D'Errico yeah you're right. Here is the complete code:
%Files and Pics
data_list = dir('*.bmp');
%Zugreifen auf Ordner und BIlder und Namen zuweisen
name = {data_list.name};
%Konvertieren in Matrix
imBlack = imread("460_dunkel.bmp");
name(strcmp(name,"460_dunkel.bmp")) = []; % remove 460_dunkel.bmp
lambda = 0.633; %Wellenlänge Laser in um
Pixelgroesse = 4.65; %Pixelgroesse in um
for i = 1:length(name)
picture = imread(name{i}); %Einlesen des Bildes in Matrix
current_name = name{i};
zaxe = str2double(name{i}(1:3)); %Auslesen des z Wertes aus Dateinamen
imBlack = double(imBlack);
pictures(:,:,i)=picture; %speichert das aktuelle (i-te)
%Bild als 2D Matrix in der 3D Matrix (:,:,i)
picture = double(picture);
filtered = double(minus(picture,imBlack));
%Ermittlung ROI
ROI = im2double(filtered);
ROIdiff = [1,1];
ROIoffset =[0, 0];
en_density = sum(sum((ROI)));
[row,column] = size(ROI);
xv = (1:column);
yv = (1:row).';
first_Moment_X(i,1) = sum(xv .* ROI, 'all');
Schwerp_X = first_Moment_X(i) / en_density;
Schwerpunkte_X(i) = Schwerp_X;
first_Moment_Y(i,1) = sum(yv .* ROI, 'all');
Schwerp_Y = first_Moment_Y(i) / en_density;
Schwerpunkte_Y(i) = Schwerp_Y;
sec_Moment_X(i,1) = sum((xv - Schwerp_X).^2 .* ROI, 'all');
Sigma_X_plural(i) = sec_Moment_X(i)/en_density;
sec_Moment_Y(i,1) = sum((yv - Schwerp_Y).^2 .* ROI, 'all');
Sigma_Y_plural(i) = sec_Moment_Y(i) / en_density;
sec_Moment_XY(i,1) = sum((xv - Schwerp_X) .* (yv - Schwerp_Y) .* ROI, 'all');
Sigma_XY_plural(i) = sec_Moment_XY(i) / en_density;
%Berechnung des Strahldurchmessers nach Formel 18 und 19 in Norm
dxPixel(i) = 2*sqrt(2)*(sqrt(Sigma_X_plural(i) + Sigma_Y_plural(i)+sign(Sigma_X_plural(i)-Sigma_Y_plural(i)).*(sqrt(((Sigma_X_plural(i)-Sigma_Y_plural(i)).^2)+4*(Sigma_XY_plural(i).^2)))));
dyPixel(i) = 2*sqrt(2)*(sqrt(Sigma_X_plural(i) + Sigma_Y_plural(i)-sign(Sigma_X_plural(i)-Sigma_Y_plural(i)).*(sqrt(((Sigma_X_plural(i)-Sigma_Y_plural(i)).^2)+4*(Sigma_XY_plural(i).^2)))));
dx(i,1) = dxPixel(i) * Pixelgroesse; %Umrechnung von Pixel in Mikrometer
dy(i,1) = dyPixel(i) * Pixelgroesse; %Umrechnung von Pixel in Mikrometer
dz(i,1) = zaxe; %Nur um alles am selben Fleck zu haben
%{
imagesc(picture);
axis on
hold on;
plot(ROIoffset(2)+Schwerpunkte_X, ROIoffset(1)+Schwerpunkte_Y,'r+', 'MarkerSize', 5, 'LineWidth', 1);
t=-pi:0.01:pi;
dx=ROIoffset(2)+Schwerpunkte_X(i)+dxPixel(i)*0.5*cos(t);
dy=ROIoffset(1)+Schwerpunkte_Y(i)+dyPixel(i)*0.5*sin(t);
plot(dx,dy,'g')
hold off
%}
end
for j = 1 : length(name)
delta_x(i) = 1.5.*dx(i,1);
delta_y(i) = 1.5.*dy(i,1);
new_roi = filtered(Schwerpunkte_X(i) - delta_x(i) : Schwerpunkte_X(i) + delta_x(i), Schwerpunkte_Y(i) - delta_y(i) : Schwerpunkte_Y(i) + delta_y(i));
structROI(i).ROI= new_roi;
new_ROIdiff = [1,1];
new_ROIoffset =[0, 0];
en_density = sum(sum((new_roi)));
[row,column] = size(new_roi);
xv = (1:column);
yv = (1:row).';
first_Moment_X(j,1) = sum(xv .* new_roi, 'all');
Schwerp_X = first_Moment_X(j) / en_density;
Schwerpunkte_X(j) = Schwerp_X;
first_Moment_Y(j,1) = sum(yv .* new_roi, 'all');
Schwerp_Y = first_Moment_Y(j) / en_density;
Schwerpunkte_Y(j) = Schwerp_Y;
sec_Moment_X(j,1) = sum((xv - Schwerp_X).^2 .* new_roi, 'all');
Sigma_X_plural(j) = sec_Moment_X(j)/en_density;
sec_Moment_Y(j,1) = sum((yv - Schwerp_Y).^2 .* new_roi, 'all');
Sigma_Y_plural(j) = sec_Moment_Y(j) / en_density;
sec_Moment_XY(j,1) = sum((xv - Schwerp_X) .* (yv - Schwerp_Y) .* new_roi, 'all');
Sigma_XY_plural(j) = sec_Moment_XY(j) / en_density;
%Berechnung des Strahldurchmessers nach Formel 18 und 19 in Norm
dxPixel(j) = 2*sqrt(2)*(sqrt(Sigma_X_plural(j) + Sigma_Y_plural(j)+sign(Sigma_X_plural(j)-Sigma_Y_plural(j)).*(sqrt(((Sigma_X_plural(j)-Sigma_Y_plural(j)).^2)+4*(Sigma_XY_plural(j).^2)))));
dyPixel(j) = 2*sqrt(2)*(sqrt(Sigma_X_plural(j) + Sigma_Y_plural(j)-sign(Sigma_X_plural(j)-Sigma_Y_plural(j)).*(sqrt(((Sigma_X_plural(j)-Sigma_Y_plural(j)).^2)+4*(Sigma_XY_plural(j).^2)))));
dx(j,1) = dxPixel(j) * Pixelgroesse; %Umrechnung von Pixel in Mikrometer
dy(j,1) = dyPixel(j) * Pixelgroesse; %Umrechnung von Pixel in Mikrometer
dz(j,1) = zaxe; %Nur um alles am selben Fleck zu haben
end

Answers (0)

This question is closed.

Tags

Community Treasure Hunt

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

Start Hunting!