2010-04-06 8 views

Répondre

2

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).

+0

Mais l'image RVB est M * N * 3, ce qui n'est pas l'image en niveaux de gris: M * N, non? – user198729

+0

Mais cela semble fonctionner, étrange .. – user198729

+0

@ 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

Questions connexes