Comment trouver la corrélation d'une image?
Il y a une image A
de taille fixe 256*256*3 (RVB). La formule mathématique pour la covariance entre deux pixels adjacents valeurs x,y
dans une image est populairement connu pour être:
cov(x,y) = 1/n summation from i = 1 to n of [E(x_i-E(x))(y_i-E(y))]
r_xy = cov(x,y) / (sqrt(D(x)*D(y)))
D(x) = 1/n summation from i = 1 to n of square[(x_i - E(x))]
E(x) = 1/n summation from i = 1 to n of (x_i)
où r_xy
est les coefficients de corrélation entre les deux, horizontalement, verticalement et en diagonale les pixels adjacents de ces deux images.
Q1: Comment faire le calcul ci-dessus dans MATLAB?
T2: Comment choisir au hasard dire 5000 paires de deux horizontalement pixels adjacents de l'image et ensuite le tracé de la distribution de ces deux pixels adjacents horizontalement?
- Est-ce un devoir?
- hmm,en quelque sorte. Je suis conscient des commandes corrcoef et de cov dans matlab. Mais ce que je veux, c'est d'obtenir une seule valeur numérique(peut être à virgule flottante) de la valeur que je ne suis pas arriver. Comment faire pour obtenir une seule valeur numérique à l'aide de cette? Souhaite aussi à l'intrigue de la série de chiffre valeurs sur un graphique avec les valeurs de gris des pixels de l'emplacement (x,y) sur l'Axe des X et les valeurs de gris des pixels de l'emplacement (x+1,y) sur l'Axe des ordonnées.
- Question d'origine de l'OP commencé ici stackoverflow.com/q/3690246/404469
- Cette question a été posée après celui-ci.
- Mon erreur, j'ai vu que la première.
Vous devez vous connecter pour publier un commentaire.
Comme c'est le cas de traitement d'image pour truecolor images RVB, il ya un couple de questions clés à la première adresse. Je l'ai mentionné dans ma réponse à votre autre question impliquant un autre algorithme de traitement d'image, mais ils portent de répéter ici:
Bien, maintenant, que ces formalités sont hors de la voie, je vois votre problème ci-dessus est composée de deux étapes. Tout d'abord, vous devez sélectionner des sous-ensembles de paires de pixels de l'image, comme tous horizontalement paires de pixels. Deuxièmement, vous devez appliquer les formules statistiques, vous avez ci-dessus. Dans les exemples ci-dessous, je pars du principe que les opérations sont effectuées sur le rouge (c'est à dire en premier) plan de couleur de la matrice
A
:La sélection de sous-ensembles de paires de pixels: commençons par la unique de l'ensemble des liaisons horizontales de pixels. Si je sélectionne les pixels dans la première colonne de
A
et les placer dans le sous-ensemblex
, puis à l'horizontale pixels adjacents seront ceux de la deuxième colonne deA
, et ceux-ci seront placés dans le sous-ensembley
. Je peux aussi ajouter des pixels dans la deuxième colonne pour le sous-ensemblex
, et les pixels adjacents horizontalement dans la troisième colonne serait alors placée dans le sous-ensembley
. Répéter ce pour toutes les colonnes dansA
, nous pouvons voir que les pixels dans les colonnes 1 à 255 seront dans le sous-ensemblex
, et les pixels dans les colonnes 2 à 256 sera dans le sous-ensembley
. Le la matrice d'indexation serait donc ressembler à ceci:Suivant la même logique que ci-dessus, on peut construire l'ensemble de la verticale unique paires de pixels dans ce mode:
Et de même pour l'ensemble des unique en diagonale les paires de pixels, où "diagonale" s'exécute à partir du haut à gauche au bas à droite de la matrice:
Ou pour les "anti-diagonales", où "diagonale" s'exécute à partir d'en bas à gauche à en haut à droite dans la matrice:
Maintenant, vous pouvez choisir l'un de ces ensembles de
x
ety
de données pour effectuer les calculs statistiques que vous souhaitez pour la couleur rouge de l'avion. Vous pouvez répéter la procédure ci-dessus la substitution de 2 ou 3 pour le dernier index de chaque ligne pour obtenir le calcul de la couleur verte et bleue des avions, respectivement.Effectué les tests statistiques: Cette partie est simple. Il y a déjà une fonction intégrée CORRCOEF pour le calcul du coefficient de corrélation dans MATLAB. Vous pourriez avoir à remodeler le sous-ensembles de valeurs de pixel
x
ety
dans la colonne des vecteurs d'abord à l'aide de seul colon indexation:Fonctions existent aussi pour les autres formules ainsi: MOYENNE pour
E(x)
, VAR pourD(x)
, et COV pourcov(x,y)
.En ce qui concerne votre deuxième question, vous pouvez d'abord créer
x
ety
comme je l'ai fait ci-dessus pour tous unique de paires de pixels adjacents horizontalement, puis créer un vecteur avec une permutation aléatoire de l'entier indices dansx
ety
à l'aide de la fonction RANDPERM. La sélection de la première 5000 entrées de ces aléatoirement par permutation des indices vous donnera 5000 aléatoire indices dansx
ety
:Cela vous donnera votre 5000 paires de horizontalement les valeurs des pixels adjacents dans
x
ety
. Cependant, il est difficile de savoir ce que tu veux dire par "le tracé de la distribution". Je devine que vous aurez finissent soit en utilisant la fonction HIST ou peut-être la fonction SCATTER à cette fin.x
ety
valeurs,scatter(x,y)
est ce que vous voulez.x
ety
tels qu'ils contiennent tous unique horizontale paires (comme je l'ai décrit plus haut), puis sélectionnez 5000 de ces paires au hasard. C'est à vous de la façon dont vous voulez le faire. Concernant les points 1 et 2, oui, vous voulez utiliserxRand
etyRand
pour votre de corrélation et de nuage de points.x
ety
qui contiennent des tous unique paires de diagonale les valeurs des pixels adjacents de l'image. N'est-ce pas ce que vous voulez?x
ety
avec IMSHOW, ils vont regarder de très près la même. C'est parce qu'ils sont simplement des versions de l'image d'origine avec une seule ligne ou colonne supprimée à partir d'un bord. Cependant, lors de l'appel de CORRCOEF les éléments dex
ety
sera remodelé en un seul colonnes, et les éléments correspondants dansx
ety
(c'est à dire les "liaisons") sera à la fin complètement différente en raison de la suppression de ces lignes ou des colonnes à partir des bords de l'image d'origine. ...A(1,1,:), A(2,2,:), ... A(256,256,:)
.