ฉันจะลบเงาออกจากรูปภาพได้อย่างไร


17

ฉันมีภาพนี้

ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องการลบเงาออกจากภาพ ฉันรู้วิธีการที่แตกต่างกันมากมายเช่นการใช้ลักษณะทางสัณฐานวิทยาบางอย่างถูกใช้เพื่อลบเงา:

ฉันสร้างมาสก์นี้สำหรับภาพเดียวกัน

ป้อนคำอธิบายรูปภาพที่นี่

มีวิธีอื่นที่ฉันสามารถลองใช้มาสก์นี้ที่ฉันสร้างขึ้นได้ไหม?

แก้ไข :

ภาพอินพุตและมาส์กที่มีขนาดเดียวกันกับที่ร้องขอ:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข 2: ฉันสร้างภาพคงที่ 1D แต่มันไม่สมบูรณ์

  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)

ป้อนคำอธิบายรูปภาพที่นี่

ไม่สามารถเข้าใจสิ่งที่ฉันทำผิดที่นี่โปรดช่วย?


คำถามที่ดี! คุณเคยลองเพิ่มความสว่างในพื้นที่ที่สวมหน้ากากหรือไม่?
Dima

5
ตรวจสอบคำตอบของฉันที่นี่: dsp.stackexchange.com/questions/454/…
ดาต้านักวิเคราะห์

ในแง่ง่ายการสะท้อนแสงของพื้นผิวที่แตกต่างกันสองแบบนั้นแตกต่างกันทั้งในแง่สมบูรณ์และวิธีที่พวกเขาสะท้อนแสงโดยตรงกับทางอ้อม ดังนั้นพวกเขาจึงตอบสนองต่อการอยู่ในเงาที่แตกต่างกันและต้องการสูตรที่แตกต่างกันสำหรับการยกเลิกเงา
Daniel R Hicks

มีวิธีอื่น ๆ เช่นการตรวจจับขอบโดยใช้อนุพันธ์อันดับสองโดยใช้การไล่ระดับสีและตัวดำเนินการ Laplacian

1
คำถามที่เกี่ยวข้อง: mathematica.stackexchange.com/questions/7414/…
Niki Estner

คำตอบ:


11

มีสิ่งพิมพ์จำนวนมากที่เกี่ยวข้องกับการตรวจจับเงาสร้างเงามาสก์และบางอย่างที่นำเงาออกจริง ๆ - เช่นที่กล่าวถึงในโพสต์ก่อนหน้า ฉันสามารถเพิ่มบางอย่างลงในรายการถ้าจำเป็น อย่างไรก็ตามปัญหาคือ IMHO อยู่ไกลจากการแก้ไข สำหรับการเริ่มต้นอย่างรวดเร็วโดยใช้ Shadow-Mask ฉันแนะนำ (และได้ลองในอดีต) ทั้งสองวิธีต่อไปนี้ พวกเขาลดเงา - ไม่ราบรื่นเสมอไปและฉันแน่ใจว่ามีสิ่งพิมพ์ (ไม่ใช่โดยฉัน) ที่เกี่ยวข้องกับการกำจัดเงาในลักษณะที่คล้ายกัน

  • เทคนิคการจัดการโดเมนแบบไล่ระดับสีตามที่อธิบายไว้ที่นี่ (มีรหัส C และ Matlab ให้): http://www.umiacs.umd.edu/~aagrawal/ICCV2007Course/index.html การไล่ระดับสีแบบผสมผสานสามารถใช้สำหรับการประมวลผลภาพจำนวนมาก ปัญหาดูสไลด์ / งานนำเสนอสำหรับตัวอย่างเพิ่มเติม

    แนวคิดทั่วไป:

    1. คำนวณอนุพันธ์เชิงพื้นที่ (ภาพไล่ระดับสี) สำหรับช่องสีทั้งหมด
    2. ใช้ขอบเขตเงาจากหน้ากากเงาเพื่อสร้างหน้ากากน้ำหนักที่ใกล้เคียงกับศูนย์ในขอบเขตเงาและเพิ่มขึ้นเป็นหนึ่งในพื้นที่ใกล้เคียงที่ระบุตามแนวเงาขอบคือ orthogonal ไปยังจุดขอบที่กำหนด
    3. ทวีคูณมาส์กน้ำหนักจาก (2. ) ด้วยภาพไล่ระดับสีทั้งหมดเพื่อลด / ลดขอบเขต / ขอบเงา
    4. รวมภาพไล่ระดับสีโดยใช้รหัสจากลิงก์ด้านบน
    5. สำหรับภาพ RGB จากประสบการณ์ของฉันให้คำนวณค่าเฉลี่ยของช่องสัญญาณแยกต่างหากของภาพต้นฉบับและปรับขนาดภาพรวมให้ตรงกับค่าเหล่านี้เพื่อป้องกันสิ่งประดิษฐ์สี "ตลก"
  • การปรับความสว่างในโดเมนภาพดั้งเดิม

    1. ใช้ shadow-mask เพื่อสร้างหน้ากากน้ำหนักที่อยู่นอกขอบเขตเงามีการเปลี่ยนแปลงอย่างราบรื่น (ขึ้นไป) ข้ามขอบเขตเงาและขนาดใหญ่กว่าปัจจัยหนึ่งภายในขอบเขตเงา ตามที่แนะนำในโพสต์ก่อนหน้านี้สามารถประมาณค่าสเกลแฟกเตอร์จากพื้นที่โดยรอบพื้นที่เงาโดยใช้ความสว่างเฉลี่ยพร้อมกับความสว่างเฉลี่ยของพื้นที่เงา
    2. ทวีคูณภาพต้นฉบับ (ต่อช่องสัญญาณ) ด้วยหน้ากากลดน้ำหนัก

ฉันได้ลองใช้โมเดลสีที่แตกต่างกันเช่น HSV ซึ่งมีความสว่างหรือความสว่างโดยตรงซึ่งสามารถแก้ไขได้โดยไม่ขึ้นกับสี (สี / ความอิ่มตัว) วิธีนี้ใช้ได้ผลเช่นเดียวกับการปรับความสว่างเช่นสร้างมาสก์น้ำหนักที่นุ่มนวลและเพิ่มจำนวนด้วยความส่องสว่างของแชนเนล บางทีทั้งสองวิธีคือการรวมกันของการไล่ระดับสีและการปรับความสว่างสามารถรวมกันได้อย่างชาญฉลาด แต่อาจมีบางคนเคยลองทำเช่นนั้นมาก่อน

หวังว่าจะช่วยด้วยความเคารพ Derik


2
การเชื่อมโยงดูเหมือนตายที่นี่เป็นรุ่นที่เก็บไว้ชั่วคราว
Delgan

9

ฉันเคยเห็นภาพนี้มาก่อนมาก ในความเป็นจริงที่นี่มีอยู่ในกระดาษมากในหัวข้อที่คุณต้องการแก้ไข ติดตามบทความอื่นจากกลุ่มวิจัยเดียวกันที่ Simon Fraser University ทั้งสองอย่างนี้จะช่วยให้คุณมีความรู้เบื้องต้นเกี่ยวกับปัญหาการแก้ไขสีเพื่อความไม่แปรปรวนของแสง


ใช่ฉันรู้ว่า แต่พยายามที่จะลองใช้วิธีการที่แตกต่างกันสำหรับปัญหาเดียวกัน
vini

@ vini: ถ้าคุณอ่านว่าคุณควรรู้ว่าคุณกำลังทำอะไร --- การดำเนินการทางสัณฐานวิทยาอย่างง่ายจะไม่ลดลง คุณได้อ่านและลองอะไรอีกบ้าง ฉันสามารถแนะนำเอกสารอื่น ๆ หากจำเป็น
เอ็ม

@ ฉันกำลังพยายามเปลี่ยนความสว่างเพื่อให้เอฟเฟกต์ของเงาลดลง แต่ไม่ประสบความสำเร็จเท่าไหร่ .. สามารถใช้แผนที่ขอบเพื่อปกปิดเงานี้ออกมาได้ .. ใช่ฉันคิดว่าการทำงานของ morphologcal ไม่ช่วยฉันลอง imsubtract (matlab) เพื่อลบเงาออก
vini

5
@vini: ปัญหานี้อยู่นอกเหนือการแก้ปัญหาสายการบินเดียว เอกสารที่เชื่อมโยง (และมีคนอื่นด้วย) แก้ไขปัญหาในกรณีส่วนใหญ่แล้วดังนั้นหากคุณต้องการทำสิ่งใหม่คุณจะต้องค้นหาจุดอ่อนของพวกเขาและนั่นหมายถึงเข้าใจพวกเขาเป็นอย่างดีดังนั้นฉันขอให้คุณอ่านอีกครั้ง รอบคอบ พวกเขามักจะพูดถึงปัญหาในหัวข้อสนทนาและข้อสรุป วิธีการฉายภาพค่าความแปรปรวนแบบแสงคงที่ดูเหมือนจะมีแนวโน้มมากที่สุดสำหรับฉัน ...
Emre

4

มีหลายวิธีที่พูดถึงการตรวจจับเงาโดยพื้นฐานแล้วทำงานกับพื้นหลังที่รู้จัก ไม่มีความคิดที่แน่นอนในสิ่งที่เป็นเงาเพียงแค่มองสีพิกเซล อย่างไรก็ตามคุณต้องระบุเงาโดยไม่มีการอ้างอิง

ในขณะที่ปัญหานี้ยากนี่เป็นวิธีแก้ปัญหาเล็กน้อย - แม้ว่าจะพร้อมแล้ว แต่นี่อาจไม่ใช่วิธีที่ดีที่สุด แต่ก็อาจช่วยให้คุณได้รับมุมมอง

ตรวจสอบส่วนประกอบรูปภาพในโดเมน HSL

สีคือ Hue Component
ความอิ่มตัวคือ Saturation Component และ ความสว่างLightness Component

เป็นที่ทราบกันดีว่า Lightness นั้นสอดคล้องกับสีเทาเทียบเท่าของภาพและ Shadow นั้นเป็นสิ่งจำเป็นอย่างยิ่ง

พื้นที่กึ่งโปร่งใสซึ่งฉากนั้นได้รับการลดทอนในท้องถิ่น

จากที่นี่

ดังนั้นจึงเป็นภาพซ้อนทับที่ลดการสะท้อนของความมืดที่บอกว่าคุณสามารถระบุได้เหมือนกันในส่วนสีเทาของภาพ - แต่คุณจะพบว่ามันมีปฏิสัมพันธ์กันน้อยลงในส่วนของสี (สีและความอิ่มตัวของสีค่อนข้างมาก)

ตอนนี้ที่นี่ฉันสามารถผลิตภาพสองภาพได้ที่ไหน

  1. ในภาพแรกนี้เราได้ลบส่วนประกอบ Lightness (แทนที่ด้วยค่าเฉลี่ยคงที่)
    ป้อนคำอธิบายรูปภาพที่นี่

  2. ในภาพที่สองเราได้ลบองค์ประกอบความอิ่มตัวในลักษณะเดียวกัน ลบความอิ่มตัวแล้ว

เราสามารถเห็นได้ว่าแม้ว่าความสว่างจะได้รับการเก็บรักษาไว้ แต่ความอิ่มตัวจะถูกลบออก แต่ข้อมูลสำคัญเกี่ยวกับเงายังคงอยู่ - เมื่อเราลบความสว่างออกไป แม้ว่ามันจะไม่สมบูรณ์แบบ แต่ก็ทำให้คุณสมบัติสำคัญที่ช่วยให้คุณสามารถแยกแยะสิ่งที่เป็นเงาอย่างแท้จริงมาจากพื้นหลัง

จากนี้คุณสามารถใช้ภาพ "ลบความสว่าง" เป็นพื้นหลังและภาพอื่นเป็นภาพเหตุการณ์และแบ่งภาพตามข้อมูลสองนี้ ดังนั้นในพื้นที่ที่เงาไม่ได้มีบทบาทสำคัญความแตกต่างอาจน้อยกว่ามากเช่นเดียวกับเมื่อเงามีอยู่เซ็กเมนต์นั้นจะแสดงข้อผิดพลาดสูง

อีกทางหนึ่งคุณสามารถใช้การแบ่งกลุ่มอิสระ (เช่นการเพิ่มภูมิภาค) บนภาพทั้งสอง รูปภาพที่ถูกลบออกจากความอิ่มตัวจะมีส่วนเพิ่มเติมซึ่งจะไม่มีอยู่ในรูปภาพที่นำความสว่างออกซึ่งไม่มีอะไรนอกจากส่วนเงา

หมายเหตุ: คุณสามารถแยกความแตกต่างของภาพ HSL-lightness-remove ได้ด้วยตัวของมันเอง ลองสิ่งที่คล้ายกันกับพื้นที่สี HSV เช่นเดียวกับ YCbCr


2

คุณอาจใช้ฮิสโตแกรมของพื้นที่ที่ถูกบัง (เงา) และใช้การแปลงสีเชิงเส้นเพื่อให้ฮิสโตแกรมของพื้นที่ที่ถูกปกคลุมและส่วนที่เหลือของรูปภาพตรงกัน

ฉันคิดว่าสเกลแฟคเตอร์ในการแปลงจะไม่สำคัญเพียงแค่ปรับความสว่างเท่านั้นจึงจำเป็นดังนั้นคุณอาจใช้ความสว่างเฉลี่ยของทั้งสองเซ็กเมนต์ (เงา, sorroundings) และใช้ความแตกต่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.