Vous pouvez d'abord convertir l'image indexée et son colormap en une image en niveaux de gris en utilisant la fonction IND2GRAY:
[X,map] = imread('SecCode.php.png'); %# Read the indexed image and colormap
grayImage = ind2gray(X,map); %# Convert to grayscale image
Ensuite, vous pouvez appliquer le code que vous avez ci-dessus:
level = graythresh(grayImage); %# Compute threshold
bwImage = im2bw(grayImage,level); %# Create binary image
imshow(bwImage); %# Display image
EDIT:
Si vous vouliez faire une approche généralisée pour n'importe quel type d'image, voici une façon de ld faire:
%# Read an image file:
[X,map] = imread('an_image_file.some_extension');
%# Check what type of image it is and convert to grayscale:
if ~isempty(map) %# It's an indexed image if map isn't empty
grayImage = ind2gray(X,map); %# Convert the indexed image to grayscale
elseif ndims(X) == 3 %# It's an RGB image if X is 3-D
grayImage = rgb2gray(X); %# Convert the RGB image to grayscale
else %# It's already a grayscale or binary image
grayImage = X;
end
%# Convert to a binary image (if necessary):
if islogical(grayImage) %# grayImage is already a binary image
bwImage = grayImage;
else
level = graythresh(grayImage); %# Compute threshold
bwImage = im2bw(grayImage,level); %# Create binary image
end
%# Display image:
imshow(bwImage);
Cela devrait couvrir la plupart types d'images, à l'exception de certaines valeurs aberrantes (comme alternate color spaces for TIFF images).
Mais l'image RVB est M * N * 3, ce qui n'est pas l'image en niveaux de gris: M * N, non? – user198729
Mais cela semble fonctionner, étrange .. – user198729
@ user198729: La fonction GRAYTHRESH fonctionne toujours pour les images RVB, mais peut-être pas * exactement * de la même manière que pour les images en niveaux de gris, j'ai donc mis à jour. – gnovice