Bir görüntüdeki gölgeleri nasıl kaldırabilirim?


17

Bu görüntüye sahibim

resim açıklamasını buraya girin

Gölgeyi görüntüden kaldırmak istiyorum. Gölgeleri kaldırmak için belirli morfolojik işlemler gibi birçok farklı yöntem kullanıldığını biliyorum:

Bu maskeyi aynı görüntü için oluşturdum

resim açıklamasını buraya girin

Oluşturduğum bu maskeyi kullanmayı deneyebileceğim başka yöntemler var mı?

DÜZENLE :

Giriş resmi ve istenildiği gibi aynı boyutta maske:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

EDIT 2: 1D değişmez görüntü oluşturdum, ancak mükemmel değil

  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)

resim açıklamasını buraya girin

Burada yanlış yaptığımı anlayamıyorum lütfen yardım?


İyi soru! Maskelenmiş bölgede parlaklığı artırmayı denediniz mi?
Dima

5
Cevabımı buradan kontrol edin: dsp.stackexchange.com/questions/454/…
datageist

Basit bir ifadeyle, iki farklı yüzeyin yansıtıcılığı, hem mutlak olarak hem de doğrudan ve dolaylı ışığı nasıl yansıttıklarında farklıdır. Böylece gölgede olmak için farklı tepki verirler ve gölgeyi iptal etmek için farklı formüllere ihtiyaç duyarlar.
Daniel R Hicks

Gradyan kullanılarak ikinci türev kullanılarak kenar tespiti ve Laplacian operatörü gibi başka yöntemler de vardır.

Yanıtlar:


11

Gölge tespiti, gölge maskeleri oluşturma ve aslında gölgeleri ortadan kaldıran düzinelerce yayın var - önceki yazılarda bahsedilenler gibi. Gerekirse listeye bazılarını ekleyebilirim. Ancak sorun IMHO'nun çözülmesinden çok uzak. Hızlı bir başlangıç ​​için, bir gölge maskesi verildiğinde, aşağıdaki iki yaklaşımı öneririm (ve geçmişte denedim). Kesinlikle gölgeleri azaltırlar - her zaman kesintisiz değildir ve eminim, gölge kaldırmayla ilgili yayınların benzer yollarla uğraştığından eminim.

  • Burada açıklanan Degrade Etki Alanı Manipülasyon Teknikleri (C ve Matlab Kodları sağlanmıştır): http://www.umiacs.umd.edu/~aagrawal/ICCV2007Course/index.html Gradyan entegrasyonu yaklaşımı bir dizi görüntü işleme için kullanılabilir daha fazla örnek için slaytlara / sunuma bakınız.

    Genel fikir:

    1. Tüm renk kanalları için uzamsal türevleri (gradyan görüntüleri) hesaplayın.
    2. Gölge sınırlarında sıfıra yakın olan ve gölge kenarı boyunca belirtilen bir mahallede birine, yani belirli bir kenar noktasına dikey olan bir ağırlık maskesi oluşturmak için gölge maskesinden gölge sınırlarını kullanın.
    3. Gölge sınırlarını / kenarlarını azaltmak / nemlendirmek için ağırlık maskesini (2.) 'den tüm degrade görüntülerle çarpın.
    4. Degrade görüntüleri yukarıdaki bağlantıdan kodu kullanarak entegre edin.
    5. RGB görüntüler için, deneyimlerime göre, orijinal görüntülerin ayrı kanallarının ortalamasını hesaplayın ve "komik" renk yapılarını önlemek için entegre görüntüleri bu değerlerle eşleşecek şekilde ölçeklendirin.
  • Orijinal görüntü alanında parlaklık manipülasyonu.

    1. Bir dış gölge bölgesi olan, gölge sınırı boyunca düzgün bir geçişe (yukarı doğru) ve gölge bölgelerinde birden fazla ölçek faktörüne sahip bir ağırlık maskesi oluşturmak için gölge maskesini kullanın. Önceki bir gönderide önerildiği gibi, ölçek faktörü, gölge bölgesinin ortalama parlaklığı ile birlikte ortalama parlaklığı kullanarak bir gölge alanı çevreleyen alandan tahmin edilebilir.
    2. Orijinal görüntüleri (kanal başına) kırpmaya tabi olarak ağırlık maskesiyle çarpın.

Ayrıca doğrudan parlaklık veya parlaklık sunan farklı renk modelleri, örneğin renkten (ton / doygunluk) bağımsız olarak değiştirilebilen farklı renk modelleri kullanmayı denedim. Bu esas olarak parlaklık manipülasyonu gibi çalışır, yani yumuşak bir ağırlık maskesi oluşturur ve parlaklık kanalı ile çarpır. Belki de iki yaklaşım, yani gradyan entegrasyonu ve parlaklık manipülasyonu akıllıca bir şekilde birleştirilebilir, ancak birisi muhtemelen bunu daha önce de denemiştir.

Umarım yardımcı olur, saygılarımla, Derik.


2
Bağlantı ölü gibi görünüyor, burada önbelleğe alınmış bir sürüm var .
Delgan

9

Bu görüntüyü daha önce görmüştüm. Aslında burada , çözmek istediğiniz konu hakkındaki makalede yer almaktadır. Bunu , Simon Fraser Üniversitesi'nde aynı araştırma grubundan başka bir makale izledi . Her ikisi de aydınlatma değişmezliği için renk çözme sorununa iyi bir giriş sağlayacaktır.


evet biliyorum ama aynı sorun için farklı bir yöntem denemeye çalışıyordu
vini

@vini: Neyle karşı karşıya olduğunuzu bilmeniz gerektiğini okuduysanız --- basit morfolojik işlemler onu kesmeyecektir. Başka ne okudun ve denedin? Gerekirse başka makaleler de önerebilirim.
Emre

@Emre ben parlaklığı değiştirmeye çalışıyorum, böylece gölgenin etkisi ancak çok fazla başarı azaltıyor .. Bir şekilde bu gölgeyi maskelemek için bir kenar haritası kullanılabilir .. evet ben morfolojik operasyonlar imsubtract denedim yardımcı olmaz düşündüm (matlab) gölgeyi kaldırmak için
vini

5
@vini: Bu sorun tek katmanlı çözümlerin ötesinde. Bağlantılı makaleler (ve diğerleri de var) çoğu durumda sorunu zaten çözüyor, bu yüzden yeni bir şey yapmak istiyorsanız zayıflıklarını bulmanız gerekecek ve bu da onları iyi anlamak anlamına geliyor, bu yüzden onları tekrar okumanızı tavsiye ediyorum dikkatlice. Tartışma ve Sonuç bölümlerinde genellikle problemlerden bahsederler. Log-kromatiklik aydınlatma-değişmez projeksiyon yaklaşımı benim için en umut verici görünüyor ...
Emre

4

Gölge algılama hakkında temelde bilinen arka plan üzerinde çalışan birkaç yöntem vardır. Sadece piksel rengine bakarak gölgenin ne olduğuna dair mutlak bir fikir yoktur . Ancak, referans olmadan gölgeyi tanımlamanız gerekir.

Bu sorun zor olsa da, burada önemsiz bir çözüm var - ancak bu en iyisi olmayabilir, ancak yine de biraz perspektif kazanmanıza yardımcı olabilir.

HSL alanındaki görüntü bileşenlerini inceleyelim

renk Ton Bileşenidir,
Doyma Doygunluk Bileşeni ve hafiflikHafiflik Bileşeni

Hafifliğin görüntünün gri eşdeğerine yakından karşılık geldiği ve ayrıca Gölgenin aslında

sahnenin yansımasının yerel bir zayıflamaya uğradığı yarı saydam bir bölge.

itibaren burada .

Bu nedenle, karanlığın görüntünün gri kısmında aynı olduğunu belirleyebileceğiniz yansıma oranını azaltan bir kaplamadır - ancak renk kısımlarında (Ton ve doygunlukta biraz daha az etkileşime sahip olduğunu) göreceksiniz.

Şimdi, burada iki görüntü üretebiliyorum - nerede

  1. Bu ilk görüntüde Hafiflik bileşenini kaldırdık (sabit bir ortalama değerle değiştirildi)
    resim açıklamasını buraya girin

  2. İkinci resimde de Doygunluk bileşenini aynı şekilde kaldırdık Doygunluk Kaldırıldı

Hafiflik korunmuş ancak doygunluk giderilmiş olsa bile, gölge hakkındaki kritik bilgilerin bozulmamış olduğunu görebiliriz - açıklığı kaldırdığımızda gölge bilgilerinin önemli ölçüde düştüğü. Bu mükemmel olmasa da, gerçekte bir gölgenin ne olduğunu arka plandan ayırt etmenizi sağlayan önemli bir özelliktir.

Buna dayanarak, "Kaldırılan Hafiflik" görüntüsünü arka plan, diğeri olay görüntüsü olarak ele alabilir ve görüntüyü bu iki bilgiye dayanarak segmentlere ayırabilirsiniz; Dolayısıyla gölgenin önemli bir rol oynamadığı bölgelerde, fark çok daha az olabilir, burada gölgede olduğu zaman bu segment yüksek hata gösterir.

Alternatif olarak, her iki görüntüye de bağımsız bölümleme (örneğin bölge büyümesi gibi) uygulayabilirsiniz. Doygunluk kaldırılan görüntüde, gölge segmentinden başka bir şey olmayan hafiflik kaldırılan görüntüde bulunmayan ek bölüm bulunur.

Not: HSL hafifliği kaldırılmış görüntüyü orijinalin kendisiyle ayırt edebilirsiniz. YVbCr'nin yanı sıra HSV renk alanı ile de benzer şeyleri deneyin.


2

Maskelenmiş alanın (gölge) bir histogramını alabilir ve maskelenen alanın histogramı ve görüntünün geri kalanı eşleşecek şekilde doğrusal renk dönüşümü uygulayabilirsiniz.

Dönüşümdeki ölçek faktörünün ihmal edilebilir olacağını düşünüyorum, sadece parlaklığın kaydırılması gerekli olacak, bu yüzden iki segmentin (gölge, çevirme) ortalama parlaklığını alıp farkı uygulayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.