Transformation de distance OpenCV produisant une image qui ressemble exactement à l'image d'entrée
Je fais un certain travail de détection à l'aide d'OpenCV, et j'ai besoin d'utiliser la distance de la transformation. À l'exception de la distance en fonction de transformation dans opencv me donne une image qui est exactement la même que l'image que j'ai de l'utiliser comme source. Quelqu'un sait ce que je fais de mal? Voici la partie de mon code:
cvSetData(depthImage, m_rgbWk, depthImage->widthStep);
//gotten openCV image in "depthImage"
IplImage *single_channel_depthImage = cvCreateImage(cvSize(320, 240), 8, 1);
cvSplit(depthImage, single_channel_depthImage, NULL, NULL, NULL);
//smoothing
IplImage *smoothed_image = cvCreateImage(cvSize(320, 240), 8, 1);
cvSmooth(single_channel_depthImage, smoothed_image, CV_MEDIAN, 9, 9, 0, 0);
//do canny edge detector
IplImage *edges_image = cvCreateImage(cvSize(320, 240), 8, 1);
cvCanny(smoothed_image, edges_image, 100, 200);
//invert values
IplImage *inverted_edges_image = cvCreateImage(cvSize(320, 240), 8, 1);
cvNot(edges_image, inverted_edges_image);
//calculate the distance transform
IplImage *distance_image = cvCreateImage(cvSize(320, 240), IPL_DEPTH_32F, 1);
cvZero(distance_image);
cvDistTransform(inverted_edges_image, distance_image, CV_DIST_L2, CV_DIST_MASK_PRECISE, NULL, NULL);
En un mot, j'ai grad l'image à partir de la kinect, de la transformer en une image de canal, lisse, d'exécuter le savant détecteur de bord, inverser les valeurs, et ensuite je fais la distance transformer. Mais l'image est exactement la même que l'image d'entrée. Quel est le problème?
Merci!
source d'informationauteur Mina Almasry
Vous devez vous connecter pour publier un commentaire.
Je crois que la clé ici, c'est qu'ils look le même. Voici un petit programme que j'ai écrit pour montrer la différence:
Dans la non-normalisé de l'image, vous voyez ceci:
qui n'a pas vraiment l'impression qu'elle a changé quelque chose, mais la distance étapes sont très faibles par rapport à l'ensemble de la plage de valeurs [0, 255] (en raison de
imshow
la conversion de l'image de virgule flottante de 32 bits à 8 bits pour l'affichage), nous ne pouvons pas voir les différences, donc, nous allons normaliser...Maintenant, nous obtenons ceci:
Les valeurs elles-mêmes doivent être correctes, mais lors de l'affichage, vous aurez besoin de normaliser l'image pour voir la différence.
EDIT :
Voici un petit échantillon 10x10 à partir du coin supérieur gauche de la
dist
matrice de montrer que les valeurs sont en fait différents:Je viens de comprendre ça.
Le OpenCV
distanceTransform
et donc il s'attend à ce que les bords de l'image négative.
Tout ce que vous devez faire est de nier les bords de l'image:
Vous pouvez imprimer ces valeurs à l'aide de ce code avant de normaliser la fonction: