लापता आरजीबी चैनल का पुनर्निर्माण करें


11

प्राकृतिक दृश्यों की इन तस्वीरों को देखें, उनमें से एक RGB चैनल के साथ:

एक रमणीय जंगल जिसमें कोई लाल नहीं है

स्रोत (लाल के साथ): https://en.wikipedia.org/wiki/File:Altja_j%C3%B5gi_Lahemaal.jpg

एक अंटार्कटिक तट जिसमें कोई हरा नहीं है

स्रोत (हरे रंग के साथ): https://commons.wikimedia.org/wiki/File:2007_mather-lake_hg.jpg

कोई लाल के साथ एक लाल लोमड़ी

स्रोत (नीले रंग के साथ): https://commons.wikimedia.org/wiki/File:Fox_01.jpg

चैनलों में से एक के बिना भी, आप संभवतया यह पता लगा सकते हैं कि कुछ चीजों को किन रंगों में माना जाता है, या कम से कम एक अच्छा विचार है यदि लापता चैनल का पुनर्निर्माण सटीक है।

उदाहरण के लिए, यहां एक लाल चैनल के साथ पहली तस्वीर है जो उस पर वापस जोड़ा गया है जो सिर्फ यादृच्छिक शोर है:

फोटो 1 शोर के साथ जोड़ा

यह छवि स्पष्ट रूप से लाल चैनल का सटीक पुनर्निर्माण नहीं है। ऐसा इसलिए है क्योंकि प्रकृति की तस्वीरें आम तौर पर पूरे आरजीबी स्पेक्ट्रम का उपयोग नहीं करती हैं, लेकिन केवल "प्राकृतिक दिखने वाले रंगों" का सबसेट है। साथ ही, लाल रंग के शेड्स कुछ ग्रेडिएंट का अनुसरण करेंगे जो दूसरों के साथ सहसंबंध रखते हैं।


आपका कार्य एक ऐसा प्रोग्राम बनाना है जो एक ऐसा फोटो खींचेगा जिसमें एक चैनल को हटा दिया गया हो और मूल छवि को बारीकी से समझने का प्रयास किया गया हो, जिसे वह मानता है कि वह लापता चैनल है।

मूल छवि के चैनल के साथ गायब चैनल का मिलान कितनी बारीकी से किया जाता है, इस पर आपका कार्यक्रम बनाया जाएगा, उस चैनल के मानों की गणना करके जिसका मूल मान वास्तविक छवि में वास्तविक मान के (15 (समावेशी) के भीतर है (जहां मान एक मानक 8-बिट रंग चैनल के रूप में 0 से 255 तक होता है)।

आपके प्रोग्राम का परीक्षण किया जाने वाला परीक्षण यहां पाया जा सकता है (9.04 MB ज़िप फ़ाइल, 6 चित्र)। वर्तमान में इसमें केवल ऊपर के तीन उदाहरण चित्र और उनके मूल शामिल हैं, लेकिन मैंने उन्हें पूरा करने के बाद कुछ और जोड़कर पूर्ण सुइट बनाया जाएगा।

प्रत्येक छवि को घटाया जाता है और 1024 x 768 पर क्रॉप किया जाता है, इसलिए आपके स्कोर में उनका वजन समान होगा। वह प्रोग्राम जो दिए गए सहिष्णुता जीत के भीतर सबसे अधिक पिक्सेल की भविष्यवाणी कर सकता है।


1
आप एक स्कोरिंग प्रोग्राम लिख सकते हैं, उदाहरण के लिए पायथन में?
orlp

मैं कल मिलूंगा। अभी मुझे बिस्तर पर जाने की जरूरत है।
जो जेड

क्या कार्यक्रम के रनटाइम की कोई सीमा है?
Lause

@ मान लें कि कार्यक्रम वास्तव में आउटपुट का उत्पादन करने के लिए आपके धैर्य की सीमा है।
जो जेड

जवाबों:


17

पायथन 3 + स्किटिट-इमेज

बस लापता चैनल का रंग अन्य दो के औसत पर सेट करता है।

import sys
from skimage import io, color

im = io.imread(sys.argv[1])
h, w, c = im.shape

removed_channel_options = {0, 1, 2}
for y in range(h):
    for x in range(w):
        if len(removed_channel_options) == 1: break
        removed_channel_options -= {i for i, c in enumerate(im[y][x]) if c > 0}
removed_channel = removed_channel_options.pop()

for y in range(h):
    for x in range(w):
        p = [float(c) / 255 for c in im[y][x][:3]]
        p = [sum(p)/2 if i == removed_channel else p[i]
             for i in range(3)]
        im[y][x] = [int(c*255) for c in p] + [255]*(c == 4)

io.imsave(sys.argv[2], im)

और बहाल छवियां:

जंगल लोमड़ी ठंडा


3
अन्य दो का औसत - जाहिरा तौर पर बहुत अधिक सटीक (विषय-वस्तु) जितना मैंने अनुमान लगाया होगा। +1।
डिजिटल ट्रामा

2
वे बहुत पहले के हाथ से रंगा हुआ डागरेप्रोटाइप्स की याद दिलाते हैं। बहुत अच्छा। +1

6

लुआ, लव 2 डी

बस दो शेष चैनलों में से लापता चैनल सेट करता है।

local inp = love.image.newImageData(arg[2])

local channels = {1, 2, 3}
local removed = nil
local removed_options = {true,true,true}

inp:mapPixel(function(x,y,r,g,b)
    local o = {r,g,b}
    for k,v in pairs(o) do
        if v > 0 then
            removed_options[k] = false
        end
    end
    return r,g,b
end)

for k,v in pairs(removed_options) do
    if v then
        removed = k
        break
    end
end
inp:mapPixel(function(x,y,r,g,b)
    local o = {r,g,b}
    o[removed] = math.min(o[removed%3+1], o[(removed+1)%3 + 1])
    return unpack(o)
end)

inp:encode('png', IMAGE:gsub("%.png", "2.png"))

कमांड लाइन पर एक तर्क के रूप में एक फ़ाइल नाम लेता है।

जंगल लोमड़ी हिमपात

बक्शीश

मैंने लापता चैनल को 255- (a + b) पर सेट करने का प्रयास किया, जिससे मान को क्लैंप किया गया। जैसा कि "अंतराल में भरें"। परिणाम बेकार लेकिन शानदार हैं।

फॉरेस्ट रेड टीले फॉक्स येलो ब्लू स्नो पर्पल ग्रीन

और 255- (ए + बी) / 2 के साथ

वन लाल सियान बोरिंग फॉक्स येलो ब्लू बोरिंग स्नो पर्पल ग्रीन बोरिंग


चित्र अन्य उत्तर की तुलना में अधिक यथार्थवादी लगते हैं। अच्छा काम! जिज्ञासा से बाहर, यदि आप 255- (ए + बी) / 2 के बजाय क्या करते हैं (क्लैम्पिंग की कोई आवश्यकता नहीं) क्या होता है?
ETHproductions

परिणाम ऊपर पोस्ट किए गए लोगों के कम संतृप्त संस्करण हैं। मैं उन्हें गिगल्स के जवाब में जोड़ दूँगा।
ATaco

मैंने किया, वास्तव में, खीस। धन्यवाद।
गेब्रियल बेनामी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.