Comment puis-je lire dans une image BRUTE dans MATLAB?
Je veux ouvrir et lire un .raw
image dans MATLAB. Mon fichier peut être téléchargé ici. J'ai essayé les trois fragments de code, mais aucun ne donne les résultats attendus.
Extrait De Code #1
row=576; col=768;
fin=fopen('m-001-1.raw','r');
I=fread(fin,row*col,'uint8=>uint8');
Z=reshape(I,row,col);
Z=Z';
k=imshow(Z);
Il montre cette image:
Extrait De Code #2
f=fopen('m-001-1.raw');
a=fread(f);
input_img = reshape(a,768, 576, 3);
input_img = imrotate(input_img, -90);
imwrite(input_img, 'm-001-1.jpg');
Cela permet d'économiser du blanc (blanc seulement) de l'image dans .jpg
format.
Extrait De Code #3
id = fopen('m-001-1.raw', 'r');
x = fread(id, [576,768], 'short');
Lorsque j'utilise imshow(x)
, cette image montre:
Comment lire ce tableau???
OriginalL'auteur Simin Soleymanpour | 2014-09-04
Vous devez vous connecter pour publier un commentaire.
- Pierre code (merci btw!) fonctionne en supposant que votre image est en niveaux de gris. Pour les images en couleur, ce que vous devez faire est de lire dans tous les octets comme un seul tableau 1D que nous ne pouvons pas utiliser
fread
pour lire les données dans une matrice 3D (du moins pas à ma connaissance...). Après, nous avons ensuite modifier la forme de sorte qu'il devient une matrice 3D. Après nous remodeler la matrice, notez que c'est la transposée de résultat. En tant que tel, nous n'avons ni à transposer chaque canal indépendamment, ou vous pouvez habilement combinerflipdim
etimrotate
de faire de la 3D transposer pour nous. Je voudrais faire pivoter l'image, de sorte que c'est à 90 degrés dans le sens horaire, mais cela ferait l'image miroir reflète à travers les colonnes. J'utilise ensuiteflipdim
avec le deuxième paramètre comme2
que je veux miroir reflète à travers les colonnes pour obtenir l'image d'origine en arrière.En tant que tel, ce que vous voulez réellement avoir à faire est ceci:
Ce que je reçois est cette image:
Alternativement, vous pouvez certainement l'utiliser Pierre de code, mais vous pouvez l'utiliser de sorte que vous reconstruire l'image d'une seule couleur avion à l'heure. En d'autres termes, vous pouvez faire ceci:
Vous obtiendrez exactement la même image que ci-dessus.
Et il ne sera pas la dernière!
Comment pourrait-on généraliser ce n x m image? C'est, si les dimensions ne sont pas connues précédemment. Est-ce possible?
Non, il n'est pas. C'est le point d'une image RAW. Il stocke les premières pixels eux-mêmes sans informations d'en-tête. Vous avez besoin de savoir combien de lignes et de colonnes il y a avant de la main.
Qui fait sens. Je suppose que un hack serait de
size(imread(img))
en premier? Aussi je pense quepermute(img, [2,1,3])
marcherait aussi bien pour la transposer. Ouflip(permute(img, [2,1,3,]), 2)
si que la mise en miroir est nécessaireOriginalL'auteur rayryeng
Votre ligne/col tailles sont inversés. Depuis MATLAB les tableaux sont de la colonne principale, et les images raster sont généralement stockées de la ligne principale, vous devez lire l'image comme un [col row] de la matrice, puis de les transposer.
La réplication de l'image qui se passe parce que vous êtes à court 768-576 = 192 pixels par ligne, de sorte que chaque ligne est progressivement hors de ce montant. Après 4 lignes, vous avez fait la différence (4*192 = 768), si vous avez un 4-reproduction d'image.
merci,vous avez raison, mais les images dans la base de données de couleur de l'image et lorsque j'exécute ce code, il me montre une image en nuances de gris
C'est parce que c'est seulement la lecture de la première manche avec le code ci-dessus. Je vais écrire une réponse qui ne tous les trois bientôt.
merci beaucoup,je suis en attente
Avez-vous besoin de plus d'aide? Envisager d'accepter l'une de nos réponses.
OriginalL'auteur Peter