J'ai cette image
Je voudrais supprimer l'ombre de l'image. Je sais que beaucoup de méthodes différentes comme certaines opérations morphologiques ont été utilisées pour supprimer les ombres:
J'ai créé ce masque pour la même image
Y a-t-il d'autres méthodes que je pourrais essayer d'utiliser ce masque que j'ai créé?
MODIFIER :
image d'entrée et masque de même taille que demandé:
EDIT 2: j'ai généré une image invariante 1D mais ce n'est pas parfait
I = imread('shadow.jpg');
J = im2double(I);
R = J(:,:,1);
G = J(:,:,2);
B = J(:,:,3);
[len,wid] = size(R);
% Generation of 2-D Log Chromaticity Image.
for i = 1:len
for j = 1:wid
if ((R(i,j)*G(i,j)*B(i,j))~= 0)
c1(i,j) = R(i,j)/((R(i,j)*G(i,j)*B(i,j))^(1/3));
c2(i,j) = G(i,j)/((R(i,j)*G(i,j)*B(i,j))^(1/3));
c3(i,j) = B(i,j)/((R(i,j)*G(i,j)*B(i,j))^(1/3));
else
c1(i,j) = 1;
c2(i,j) = 1;
c3(i,j) = 1;
end
end
end
rho1 = mat2gray(log(c1));
rho2 = mat2gray(log(c2));
rho3 = mat2gray(log(c3));
X1 = mat2gray(rho1*1/(sqrt(2)) - rho2*1/(sqrt(2))); %(1/sqrt(2); -1/sqrt(2); 0)
X2 = mat2gray(rho1*1/(sqrt(6)) + rho2*1/(sqrt(6)) - rho3*2/(sqrt(6))); %(1/sqrt(6); 1/sqrt(6); -2/sqrt(6))
theta = 120;
InvariantImage = cos(theta*pi/180)*X1 + sin(theta*pi/180)*X2;
imagesc(InvariantImage); colormap(gray)
Je ne comprends pas ce que je fais de mal ici, aidez-moi?
Réponses:
Il existe des dizaines de publications traitant de la détection des ombres, générant des masques d'ombre, et en fait certaines qui suppriment les ombres - telles que celles mentionnées dans les articles précédents. Je pourrais en ajouter à la liste, si nécessaire. Le problème, cependant, est à mon humble avis loin d'être résolu. Pour un démarrage rapide, étant donné un masque d'ombre, je suggère (et j'ai essayé dans le passé) les deux approches suivantes. Ils réduisent définitivement les ombres - mais pas toujours sans couture, et je suis sûr qu'il existe des publications (pas par moi) traitant de la suppression des ombres de manière similaire.
Techniques de manipulation de domaine de gradient comme décrit ici (codes C et Matlab fournis): http://www.umiacs.umd.edu/~aagrawal/ICCV2007Course/index.html L'approche d'intégration de gradient peut être utilisée pour un certain nombre de traitements d'images problèmes, voir les diapositives / présentation pour d'autres exemples.
L'idée générale:
Manipulation de la luminosité dans le domaine d'image d'origine.
J'ai également essayé d'utiliser différents modèles de couleurs, par exemple HSV, qui présentent directement la luminance ou la luminosité, qui peuvent ensuite être modifiées indépendamment de la couleur (teinte / saturation). Cela fonctionne essentiellement comme la manipulation de la luminosité, c'est-à-dire générer un masque de poids lisse et le multiplier par le canal de luminance. Peut-être que les deux approches, à savoir l'intégration du gradient et la manipulation de la luminosité, peuvent être combinées de manière intelligente, mais quelqu'un a probablement déjà essayé cela.
J'espère que ça aide, cordialement, Derik.
la source
J'ai déjà vu cette image. En fait , c'est ici dans le document même sur le sujet que vous cherchez à résoudre. Suivi d' un autre article du même groupe de recherche à l'Université Simon Fraser. Ces deux éléments vous donneront une bonne introduction au problème de la résolution des couleurs pour l'invariance d'éclairage.
la source
Il existe plusieurs méthodes qui parlent de la détection des ombres et fonctionnent essentiellement dans un contexte connu. Il n'y a pas de notion absolue de ce qu'est l' ombre rien qu'en regardant une couleur de pixel. Cependant, vous devez identifier l'ombre sans référence.
Bien que ce problème soit difficile, voici une solution triviale - bien que ce ne soit peut-être pas la meilleure, mais elle peut néanmoins vous aider à acquérir une certaine perspective.
Examinons les composants d'image dans le domaine HSL
est un composant de teinte, un composant de
saturation et un composant de luminosité
Il est bien connu que la luminosité correspond étroitement à l'équivalent gris de l'image et que l'ombre est essentiellement
D' ici .
Par conséquent, c'est une superposition qui diminue la réflectance dans l'obscurité, vous pouvez l'identifier dans la partie grise de l'image - mais vous constaterez que son interaction est beaucoup moins dans les parties colorées (teinte et saturation à un peu).
Maintenant, ici, je suis capable de produire deux images - où
Dans cette première image, nous avons supprimé le composant Lightness (remplacé par une valeur moyenne fixe)
Dans la deuxième image, nous avons supprimé le composant Saturation de la même manière
Nous pouvons voir que même si la luminosité est préservée mais que la saturation est supprimée, les informations critiques sur l'ombre sont intactes - où, comme lorsque nous avons supprimé la luminosité, les informations sur l'ombre sont considérablement réduites. Bien que ce ne soit pas parfait, il constitue une fonctionnalité clé qui vous permet de distinguer ce qui est vraiment une ombre de l'arrière-plan.
Sur cette base, vous pouvez traiter l'image "Légèreté supprimée" comme arrière-plan et une autre comme l'image incidente et segmenter l'image en fonction de ces deux informations; Ainsi, dans les régions où l'ombre ne joue pas un rôle majeur, la différence pourrait être beaucoup moins grande, où comme lorsque l'ombre existe, ce segment affichera une erreur élevée.
Alternativement, vous pouvez simplement appliquer une segmentation indépendante (telle qu'une croissance de région) sur les deux images. L'image supprimée par saturation aura un segment supplémentaire qui n'existera pas dans l'image supprimée par la luminosité qui n'est rien d'autre qu'un segment d'ombre.
Remarque: vous pouvez distinguer l'image HSL de légèreté supprimée de l'original lui-même. Essayez également les choses similaires avec l'espace colorimétrique HSV ainsi que YCbCr.
la source
Vous pouvez prendre un histogramme de la zone masquée (l'ombre) et appliquer une transformation de couleur linéaire afin que l'histogramme de la zone masquée et du reste de l'image soit identique.
Je suppose que le facteur d'échelle dans la transformation serait négligeable, seul un décalage de la luminosité serait nécessaire, vous pouvez donc simplement prendre la luminosité moyenne des deux segments (ombre, entourage) et appliquer la différence.
la source