Index in position 2 exceeds array bounds (must not exceed 320).
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Katherine Korn
le 27 Mar 2020
Réponse apportée : Image Analyst
le 30 Mar 2020
How do I fix this error? The error is occuring in line 24 ( the line below case "Inside" ). I am confused because the values of i and j should shouldn't ever exceed the array size because they are derived from the array. Can somebody please explain the issue. One of the errors that I thought could be occuring is that the local function in my code is not correctly identifing the positions of those indicies, but I check my function over with my friend and his works just fine.
myImage_color = imread("sunflower.jpg");
myImage_grayscale = rgb2gray(myImage_color);
% finds size of image
[row, col] = size(myImage_grayscale);
myImage_blur = zeros(row,col);
for i = 1 : row
for j = 1 : col
% calculates position of image
position = IndexLocation(i,j, row, col);
% blurs each pixel depending on position
switch position
case "INSIDE"
myImage_blur(i,j) = ( myImage_grayscale(i,j+1) ...
+ myImage_grayscale(i,j-1) + myImage_grayscale(i,j) ...
+ myImage_grayscale(i-1,j-1) + myImage_grayscale(i-1,j) ...
+ myImage_grayscale(i-1,j+1) + myImage_grayscale(i+1,j-1) ...
+ myImage_grayscale(i+1,j) + myImage_grayscale(i+1,j+1) ) * (1/9)
case "NE"
myImage_blur(i,j) = ( myImage_grayscale(i+1,j) ...
+ 3 * myImage_grayscale(i,j) + myImage_grayscale(i,j-1) ...
+ myImage_grayscale(i+1,j-1) ) * (1/6) ;
case "RIGHT"
myImage_blur(i,j) = ( myImage_grayscale(i+1,j) ...
+ myImage_grayscale(i-1,j) + myImage_grayscale(i,j-1) ...
+ 2 * myImage_grayscale(i,j) + myImage_grayscale(i+1,j-1) ...
+ myImage_grayscale(i-1,j-1) ) * (1/7) ;
otherwise
myImage_blur = otherNodes(myImage_grayscale, i, j, position);
end
end
end
% displays grayscale and blurred image
imshow(myImage_grayscale)
imshow(myImage_blur)
% calculates position of pixel based on indicies
function [position] = IndexLocation(i,j, row, col)
if i == 1 & j ~= 1 & j ~= col
position = "LEFT";
elseif i == row & j ~= 1 & j ~= col
position = "RIGHT";
elseif j == 1 & i ~= 1 & i ~= row
position = "TOP";
elseif j == col & i ~= 1 & i ~= row
position = "BOTTOM";
elseif i == 1 & j == 1
position = "NW";
elseif i == 1 & j == row
position = "NE";
elseif i == row & j == 1
position = "SW";
elseif i == row & j == col
position = "SE";
else
position = "INSIDE";
end
end
2 commentaires
Réponse acceptée
Bhargavi Maganuru
le 30 Mar 2020
myImage_grayscale(i+1, j+1) %causes error when i=row or j=col.
myImage_grayscale(i-1, j-1) %causes error when i=1 or j=1.
You could make changes accordingly.
0 commentaires
Plus de réponses (1)
Image Analyst
le 30 Mar 2020
Change the lines to not go within half a window width of the edge. Your filter window is 3-by-3 so half the width is 1 and you should start at pixel 2, not pixel 1:
myImage_blur = myImage_grayscale; % Not zeros.
for i = 2 : row-1
for j = 2 : col-1
0 commentaires
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!