परिचय
यह ए क्रिमिसी, पी। पेरेज (कैम्ब्रिज माइक्रोसॉफ्ट रिसर्च लिमिटेड) और के। टोयामा (माइक्रोसॉफ्ट) [एक्स] द्वारा विकसित एक्समप्लर-आधारित इनपैनटिंग एल्गोरिदम द्वारा ऑब्जेक्ट रिमूवल का एक कार्यान्वयन है । यह एल्गोरिदम उच्च-सूचना छवियों (और वीडियो फ़्रेम) पर लक्षित है और इसका उद्देश्य संरचनात्मक पुनर्निर्माण और कार्बनिक पुनर्निर्माण के बीच संतुलन होना है। इस उत्तर के पैराग्राफ में मूल उत्तर से पूर्ण पाठ उद्धरण होते हैं (क्योंकि अब यह आधिकारिक रूप से उपलब्ध नहीं है) इस उत्तर को अधिक स्व-निहित बनाने के लिए।
एल्गोरिथ्म
लक्ष्य : नेत्रहीन प्रशंसनीय पृष्ठभूमि के साथ एक चयनित ( नकाबपोश ) क्षेत्र (अधिमानतः एक नेत्रहीन अलग अग्रभूमि वस्तु) को बदलें ।
पिछले काम में, कई शोधकर्ताओं ने बनावट के संश्लेषण को "शुद्ध" बनावट के साथ बड़ी छवि वाले क्षेत्रों को भरने के तरीके के रूप में माना है - दोहराए गए दो आयामी पाठ पैटर्न के साथ मध्यम स्टोचैस्टिसिटी। यह बनावट-संश्लेषण अनुसंधान के एक बड़े निकाय पर आधारित है, जो बनावट बनावट को हटाने के लिए चाहता है, जिसे शुद्ध बनावट का एक छोटा स्रोत नमूना दिया गया है [1] [[] [९] [१०] [११] [१२] [१४] [१५] [१६] [१ ९] [२२] ।
चूंकि ये तकनीकें लगातार बनावट की नकल करने में प्रभावी हैं, उन्हें वास्तविक दुनिया के दृश्यों की तस्वीरों में छेद भरने में कठिनाई होती है, जिसमें अक्सर रैखिक संरचनाएं और समग्र बनावट शामिल होती हैं - कई बनावट स्थानिक रूप से बातचीत करते हुए [23] । मुख्य समस्या यह है कि छवि क्षेत्रों के बीच की सीमाएं विभिन्न बनावटों के बीच आपसी प्रभावों का एक जटिल उत्पाद हैं। शुद्ध बनावट की द्वि-आयामी प्रकृति के विपरीत, ये सीमाएँ ऐसी बनती हैं जिन्हें अधिक एक आयामी, या रैखिक, छवि संरचना माना जा सकता है।
छवि inpainting तकनीकों प्रसार के माध्यम से लक्ष्य क्षेत्र में रैखिक संरचनाओं ( inpainting साहित्य में isophotes कहा जाता है) के प्रसार द्वारा छवियों में छेद भरते हैं । वे भौतिक गर्मी प्रवाह के आंशिक अंतर समीकरणों से प्रेरित हैं, और पुनर्स्थापना एल्गोरिदम के रूप में पूरी तरह से काम करते हैं। उनकी कमी यह है कि प्रसार प्रक्रिया कुछ धब्बा का परिचय देती है, जो ध्यान देने योग्य है।
भरा जाने वाला क्षेत्र, अर्थात, लक्ष्य क्षेत्र Ω द्वारा इंगित किया जाता है, और इसके समोच्च को, से चिह्नित किया जाता है। एल्गोरिथ्म आगे बढ़ने के साथ समोच्च आवक विकसित होता है, और इसलिए हम इसे "भरने के मोर्चे" के रूप में भी संदर्भित करते हैं। स्रोत क्षेत्र, source, जो पूरे एल्गोरिथ्म में तय रहता है, भरने की प्रक्रिया में उपयोग किए गए नमूने प्रदान करता है। अब हम यह दिखाने के लिए एल्गोरिथ्म के एक एकल पुनरावृत्ति पर ध्यान केंद्रित करते हैं कि कैसे संरचना और बनावट को अनुकरणीय-आधारित संश्लेषण द्वारा पर्याप्त रूप से नियंत्रित किया जाता है। मान लीजिए कि वर्ग टेम्पलेट ∈p ∈ p बिंदु p (अंजीर। 2 बी) पर केंद्रित है, भरना है। स्रोत क्षेत्र से सर्वश्रेष्ठ-मैच नमूना पैच ˆq∈ Φ from से आता है, जो उन हिस्सों के समान है जो पहले से ही partsp में भरे हुए हैं। चित्र में उदाहरण में। 2 बी, हम देखते हैं कि यदि ,p एक छवि बढ़त की निरंतरता पर स्थित है, सबसे अधिक संभावना है कि सबसे अच्छे मैच एक ही (या इसी तरह के रंग के) किनारे (जैसे,'q 'और' अंजीर '2c') में होंगे। आइसोफोट को अंदर की ओर फैलाने के लिए आवश्यक सभी को सर्वश्रेष्ठ-मैच सोर्स पैच (अंजीर। 2 डी) से पैटर्न का एक सरल स्थानांतरण है। सूचना है कि आइसोफोट अभिविन्यास स्वचालित रूप से संरक्षित है। आंकड़े में, इस तथ्य के बावजूद कि मूल किनारा लक्ष्य समोच्च og के लिए ऑर्थोगोनल नहीं है, प्रचारित संरचना ने स्रोत क्षेत्र के समान ही अभिविन्यास बनाए रखा है।
कार्यान्वयन और एल्गोरिथम विवरण
इस कार्यान्वयन की कार्यक्षमता ActiveX COM DLL में होस्ट की गई है, जिसे होस्ट प्रोग्राम से बाइनरी के रूप में हटा दिया जाता है और फिर IID द्वारा inpainter को कॉल करके फ्लाई पर इनवाइट किया जाता है। इस विशिष्ट मामले में, API VisualBasic में लिखा गया है और इसे किसी भी COM- सक्षम भाषा से कहा जा सकता है। कोड का निम्न खंड द्विआधारी छोड़ता है:
Func deflate($e=DllStructCreate,$f=@ScriptDir&"\inpaint.dll")
If FileExists($f) Then Return
!! BINARY CODE OMITTED FOR SIZE REASONS !!
$a=$e("byte a[13015]")
DllCall("Crypt32.dll","bool","CryptStringToBinaryA","str",$_,"int",0,"int",1,"struct*",$a,"int*",13015,"ptr",0,"ptr",0)
$_=$a.a
$b=$e('byte a[13015]')
$b.a=$_
$c=$e("byte a[14848]")
DllCall("ntdll.dll","int","RtlDecompressBuffer","int",2,"struct*",$c,"int",14848,"struct*",$b,"int",13015,"int*",0)
$d=FileOpen(@ScriptDir&"\inpaint.dll",18)
FileWrite($d,Binary($c.a))
FileClose($d)
EndFunc
लाइब्रेरी को बाद में CLSID और IID का उपयोग करके तत्काल किया जाता है:
Local $hInpaintLib = DllOpen("inpaint.dll")
Local $oInpaintLib = ObjCreate("{3D0C8F8D-D246-41D6-BC18-3CF18F283429}", "{2B0D9752-15E8-4B52-9569-F64A0B12FFC5}", $hInpaintLib)
पुस्तकालय एक GDIOBJECT हैंडल को स्वीकार करता है, विशेष रूप से किसी भी GDI / + बिटमैप (फाइल, स्ट्रीम) का DIBSection। निर्दिष्ट छवि फ़ाइल भरी हुई है, और Scan0
इनपुट छवि आयामों से निर्मित एक खाली बिटमैप पर खींची गई है ।
इस कार्यान्वयन के लिए इनपुट फ़ाइल किसी भी GDI / + संगत फ़ाइल स्वरूप है जिसमें नकाबपोश छवि डेटा है। मुखौटा (रों) इनपुट छवि में एक या अधिक समान रूप से रंगीन क्षेत्रों है। उपयोगकर्ता मुखौटा के लिए एक आरजीबी रंग मूल्य की आपूर्ति करता है, केवल पिक्सेल जो उस रंग मूल्य से मेल खाते हैं। डिफ़ॉल्ट मास्किंग का रंग हरा (0, 255, 0) है। सभी नकाबपोश क्षेत्र एक साथ लक्ष्य क्षेत्र का प्रतिनिधित्व करते हैं, filled, हटाए जाने और भरे जाने के लिए। स्रोत क्षेत्र, source, को लक्ष्य क्षेत्र (us = I Φ Φ) संपूर्ण छवि के रूप में परिभाषित किया गया है।
अगला, जैसा कि सभी उदाहरण-आधारित बनावट संश्लेषण [10] के साथ , टेम्प्लेट विंडो का आकार Ψ (उर्फ " स्कैन त्रिज्या ") निर्दिष्ट किया जाना चाहिए। यह कार्यान्वयन 6² पिक्सेल का एक डिफ़ॉल्ट विंडो आकार प्रदान करता है, लेकिन व्यवहार में उपयोगकर्ता को इसे स्रोत क्षेत्र में सबसे बड़े विशिष्ट बनावट तत्व, या "टेक्सल" से थोड़ा बड़ा होने की आवश्यकता होती है। मूल एल्गोरिथ्म के लिए एक अतिरिक्त संशोधन उपयोगकर्ता-निश्चित " ब्लॉक आकार " है जो पिक्सेल के क्षेत्र को एक नए समान रंग के साथ प्रतिस्थापित करने के लिए निर्धारित करता है। इससे गति बढ़ती है और गुणवत्ता घटती है। 1px से ब्लॉक आकार के ग्राफर का उपयोग अत्यंत समान क्षेत्रों (पानी, रेत, फर आदि) के साथ किया जाना है, हालांकि, at को अधिकतम रखा जाना चाहिए। .5x ब्लॉक आकार (जो मुखौटा के आधार पर असंभव हो सकता है)।
1bit छवियों पर एल्गोरिथ्म को स्टाल नहीं करने के लिए, हर बार 5 रंगों से कम की छवि प्राप्त होती है, विंडो का आकार 10x से बढ़ जाता है।
एक बार ये पैरामीटर निर्धारित हो जाने के बाद, शेष क्षेत्र-भरने की प्रक्रिया पूरी तरह से स्वचालित है। हमारे एल्गोरिथ्म में, प्रत्येक पिक्सेल एक रंग मान (या "खाली", यदि पिक्सेल अपूर्ण है) और एक विश्वास मूल्य रखता है, जो पिक्सेल मूल्य में हमारे आत्मविश्वास को दर्शाता है, और जो एक पिक्सेल भर जाने के बाद जमे हुए है। एल्गोरिथ्म के दौरान, भरण मोर्चे के साथ पैच को भी एक अस्थायी प्राथमिकता मूल्य दिया जाता है, जो उस क्रम को निर्धारित करता है जिसमें वे भरे हुए हैं। फिर, हमारा एल्गोरिदम निम्नलिखित तीन चरणों को पुनरावृत्त करता है जब तक कि सभी पिक्सेल भर नहीं गए।
चरण 1: कम्प्यूटिंग पैच प्राथमिकताएं
गैर-पैरामीट्रिक बनावट संश्लेषण [1] [6] [१०] [१३] के लिए भरना आदेश महत्वपूर्ण है । इस प्रकार अब तक, डिफ़ॉल्ट पसंदीदा "प्याज छील" विधि रही है, जहां लक्ष्य क्षेत्र को बाहर की ओर से संकेंद्रित परतों में संश्लेषित किया जाता है। हमारा एल्गोरिथम इस कार्य को सबसे पहले भरने वाले एल्गोरिथ्म के माध्यम से करता है जो पूरी तरह से प्राथमिकता मानों पर निर्भर करता है जो कि भरने वाले मोर्चे पर प्रत्येक पैच को सौंपा जाता है। प्राथमिकता की गणना उन पैचों के प्रति पक्षपाती है जो मजबूत किनारों की निरंतरता पर हैं और जो उच्च-आत्मविश्वास वाले पिक्सल से घिरे हैं, ये पिक्सेल सीमा हैं, जो मान -2 द्वारा चिह्नित हैं। निम्नलिखित कोड प्राथमिकताओं को फिर से बताता है:
For j = m_top To m_bottom: Y = j * m_width: For i = m_left To m_right
If m_mark(Y + i) = -2 Then m_pri(Y + i) = ComputeConfidence(i, j) * ComputeData(i, j)
Next i: Next j
कुछ p δΩ 3 (अंजीर देखें 3) के लिए बिंदु p पर केंद्रित एक पैच ap को देखते हुए, इसकी प्राथमिकता P (p) को गणना आत्मविश्वास ( ComputeConfidence
या, C) (पी ) और डेटा शब्द ( ComputeData
, ) के उत्पाद के रूप में परिभाषित किया गया है । या डी (पी ), जहां
, कहाँ पे
| Ψp | thep का क्षेत्र है, α एक सामान्यीकरण कारक है (उदाहरण के लिए, एक विशिष्ट ग्रे-स्तरीय छवि के लिए α = 255), और np बिंदु पी में सामने δΩ के लिए एक इकाई वेक्टर ओर्थोगोनल है। प्रत्येक सीमा पैच के लिए प्राथमिकता की गणना लक्ष्य क्षेत्र की सीमा पर प्रत्येक पिक्सेल के लिए अलग पैच के साथ की जाती है।
के रूप में लागू किया गया
Private Function ComputeConfidence(ByVal i As Long, ByVal j As Long) As Double
Dim confidence As Double
Dim X, Y As Long
For Y = IIf(j - Winsize > 0, j - Winsize, 0) To IIf(j + Winsize < m_height - 1, j + Winsize, m_height - 1): For X = IIf(i - Winsize > 0, i - Winsize, 0) To IIf(i + Winsize < m_width - 1, i + Winsize, m_width - 1)
confidence = confidence + m_confid(Y * m_width + X)
Next X: Next Y
ComputeConfidence = confidence / ((Winsize * 2 + 1) * (Winsize * 2 + 1))
End Function
Private Function ComputeData(ByVal i As Long, ByVal j As Long) As Double
Dim grad As CPOINT
Dim temp As CPOINT
Dim grad_T As CPOINT
Dim result As Double
Dim magnitude As Double
Dim max As Double
Dim X As Long
Dim Y As Long
Dim nn As CPOINT
Dim Found As Boolean
Dim Count, num As Long
Dim neighbor_x(8) As Long
Dim neighbor_y(8) As Long
Dim record(8) As Long
Dim n_x As Long
Dim n_y As Long
Dim tempL As Long
Dim square As Double
For Y = IIf(j - Winsize > 0, j - Winsize, 0) To IIf(j + Winsize < m_height - 1, j + Winsize, m_height - 1): For X = IIf(i - Winsize > 0, i - Winsize, 0) To IIf(i + Winsize < m_width - 1, i + Winsize, m_width - 1)
If m_mark(Y * m_width + X) >= 0 Then
Found = False
Found = m_mark(Y * m_width + X + 1) < 0 Or m_mark(Y * m_width + X - 1) < 0 Or m_mark((Y + 1) * m_width + X) < 0 Or m_mark((Y - 1) * m_width + X) < 0
If Found = False Then
temp.X = IIf(X = 0, m_gray(Y * m_width + X + 1) - m_gray(Y * m_width + X), IIf(X = m_width - 1, m_gray(Y * m_width + X) - m_gray(Y * m_width + X - 1), (m_gray(Y * m_width + X + 1) - m_gray(Y * m_width + X - 1)) / 2#))
temp.Y = IIf(Y = 0, m_gray((Y + 1) * m_width + X) - m_gray(Y * m_width + X), IIf(Y = m_height - 1, m_gray(Y * m_width + X) - m_gray((Y - 1) * m_width + X), (m_gray((Y + 1) * m_width + X) - m_gray((Y - 1) * m_width + X)) / 2#))
magnitude = temp.X ^ 2 + temp.Y ^ 2
If magnitude > max Then
grad.X = temp.X
grad.Y = temp.Y
max = magnitude
End If
End If
End If
Next X: Next Y
grad_T.X = grad.Y
grad_T.Y = -grad.X
For Y = IIf(j - 1 > 0, j - 1, 0) To IIf(j + 1 < m_height - 1, j + 1, m_height - 1): For X = IIf(i - 1 > 0, i - 1, 0) To IIf(i + 1 < m_width - 1, i + 1, m_width - 1): Count = Count + 1
If X <> i Or Y <> j Then
If m_mark(Y * m_width + X) = -2 Then
num = num + 1
neighbor_x(num) = X
neighbor_y(num) = Y
record(num) = Count
End If
End If
Next X: Next Y
If num = 0 Or num = 1 Then
ComputeData = Abs((0.6 * grad_T.X + 0.8 * grad_T.Y) / 255)
Else
n_x = neighbor_y(2) - neighbor_y(1)
n_y = neighbor_x(2) - neighbor_x(1)
square = CDbl(n_x ^ 2 + n_y ^ 2) ^ 0.5
ComputeData = Abs((IIf(n_x = 0, 0, n_x / square) * grad_T.X + IIf(n_y = 0, 0, n_y / square) * grad_T.Y) / 255)
End If
End Function
विश्वास अवधि सी (पी) को पिक्सेल पी के आसपास की विश्वसनीय जानकारी की मात्रा के माप के रूप में सोचा जा सकता है। इरादा पहले उन पैच को भरने का है जिनके पास पहले से ही अधिक पिक्सेल भरे हुए हैं, पिक्सल को दी गई अतिरिक्त वरीयता के साथ जो जल्दी भरे गए थे (या जो लक्ष्य क्षेत्र का हिस्सा कभी नहीं थे)।
यह स्वचालित रूप से भरण मोर्चे के साथ कुछ आकृतियों के लिए वरीयता को शामिल करता है। उदाहरण के लिए, पैच जिनमें लक्ष्य क्षेत्र के कोनों और पतली निविदाएं शामिल हैं, पहले भरे जाएंगे, क्योंकि वे मूल छवि से अधिक पिक्सेल से घिरे हुए हैं। ये पैच मैच के लिए अधिक विश्वसनीय जानकारी प्रदान करते हैं। इसके विपरीत, टारगेट क्षेत्र में जूटिंग से भरे हुए पिक्सल्स के "पेनिनसुलेस" के सिरे पर पैच तब तक अलग-अलग सेट होंगे जब तक कि आसपास के पिक्सल्स में से ज्यादा न भर जाए। मोटे स्तर पर, (1) का C (p) शब्द लगभग होता है। वांछनीय गाढ़ा भरने के क्रम को लागू करता है।
आय को भरने के रूप में, लक्ष्य क्षेत्र की बाहरी परतों में पिक्सल अधिक से अधिक आत्मविश्वास मूल्यों की विशेषता होगी, और इसलिए पहले से भरे जा सकते हैं; लक्ष्य क्षेत्र के केंद्र में पिक्सेल में कम आत्मविश्वास मूल्य होंगे। डेटा शब्द डी (पी) आइसोफेट्स की ताकत का एक कार्य है जो प्रत्येक पुनरावृत्ति पर सामने D को मारता है। यह शब्द एक पैच की प्राथमिकता को बढ़ाता है जो एक आइसोफोट "में बहता है"। यह कारक हमारे एल्गोरिथ्म में मौलिक महत्व का है क्योंकि यह रैखिक संरचनाओं को पहले संश्लेषित करने के लिए प्रोत्साहित करता है, और इसलिए लक्ष्य क्षेत्र में सुरक्षित रूप से प्रचारित किया जाता है। टूटी हुई रेखाएँ जुड़ती हैं, इस प्रकार दृष्टि मनोविज्ञान के "कनेक्टिविटी सिद्धांत" का एहसास होता है [7] [१ connect ] ।
भरण आदेश छवि गुणों पर निर्भर करता है, जिसके परिणामस्वरूप एक कार्बनिक संश्लेषण प्रक्रिया होती है जो "टूटी-संरचना" कलाकृतियों के जोखिम को समाप्त करती है और एक महंगी पैच-कटिंग चरण [9] या धब्बा-उत्प्रेरण सम्मिश्रण चरण के बिना अवरुद्ध कलाकृतियों को कम करती है [19] ] हो गया ।
चरण 2: बनावट और संरचना की जानकारी का प्रचार करना
भरने के मोर्चे ( सीमा ) पर सभी प्राथमिकताओं की गणना की जाने के बाद, सर्वोच्च प्राथमिकता वाला पैच ˆpities पाया जाता है। हम फिर इसे स्रोत क्षेत्र then से निकाले गए डेटा से भरते हैं। हम स्रोत क्षेत्र के प्रत्यक्ष नमूने द्वारा छवि बनावट का प्रचार करते हैं। [१०] के समान , हम उस पैच के स्रोत क्षेत्र में खोज करते हैं जो ,pˆ के समान है। औपचारिक रूप से,
, कहाँ पे
दो जेनेरिक पैच thea और generb के बीच की दूरी d (Ψa, db) को बस दो पैच में पहले से भरे पिक्सेल के वर्ग अंतर (SSD) के योग के रूप में परिभाषित किया गया है। इस चरण में कोई और विश्लेषण या हेरफेर ( विशेष रूप से कोई धुंधला नहीं ) किया जाता है। यह गणना मुख्य चक्र लूप में चलती है और इसे निम्नानुसार लागू किया जाता है:
अधिकतम प्राथमिकता प्राप्त करना:
For j = m_top To m_bottom: Jidx = j * m_width: For i = m_left To m_right
If m_mark(Jidx + i) = -2 And m_pri(Jidx + i) > max_pri Then
pri_x = i
pri_y = j
max_pri = m_pri(Jidx + i)
End If
Next i: Next j
सबसे समान पैच ढूँढना:
min = 99999999
For j = PatchT To PatchB: Jidx = j * m_width: For i = PatchL To PatchR
If m_source(Jidx + i) Then
sum = 0
For iter_y = -Winsize To Winsize: target_y = pri_y + iter_y
If target_y > 0 And target_y < m_height Then
target_y = target_y * m_width: For iter_x = -Winsize To Winsize: target_x = pri_x + iter_x
If target_x > 0 And target_x < m_width Then
Tidx = target_y + target_x
If m_mark(Tidx) >= 0 Then
source_x = i + iter_x
source_y = j + iter_y
Sidx = source_y * m_width + source_x
temp_r = m_r(Tidx) - m_r(Sidx)
temp_g = m_g(Tidx) - m_g(Sidx)
temp_b = m_b(Tidx) - m_b(Sidx)
sum = sum + temp_r * temp_r + temp_g * temp_g + temp_b * temp_b
End If
End If
Next iter_x
End If
Next iter_y
If sum < min Then: min = sum: patch_x = i: patch_y = j
End If
Next i: Next j
चरण 3: आत्मविश्वास मूल्यों को अद्यतन करना
पैच के बाद ˆpˆ को नए पिक्सेल मानों से भर दिया गया है, आत्मविश्वास C (p) followsp the द्वारा सीमांकित क्षेत्र में अद्यतन किया गया है:
यह सरल अद्यतन नियम हमें छवि-विशिष्ट मापदंडों के बिना, भरने के मोर्चे पर पैच के सापेक्ष आत्मविश्वास को मापने की अनुमति देता है। आय को भरने के रूप में, आत्मविश्वास मूल्यों का क्षय होता है, यह दर्शाता है कि हम लक्ष्य क्षेत्र के केंद्र के पास पिक्सेल के रंग मूल्यों से कम सुनिश्चित हैं। यहां लागू किया गया (अन्य सभी आवश्यक अपडेट के साथ):
x0 = -Winsize
For iter_y = -Winsize To Winsize: For iter_x = -Winsize To Winsize
x0 = patch_x + iter_x
y0 = patch_y + iter_y
x1 = pri_x + iter_x
y1 = pri_y + iter_y
X1idx = y1 * m_width + x1
If m_mark(X1idx) < 0 Then
X0idx = y0 * m_width + x0
PicAr1(x1, y1) = m_color(X0idx)
m_color(X1idx) = m_color(X0idx)
m_r(X1idx) = m_r(X0idx)
m_g(X1idx) = m_g(X0idx)
m_b(X1idx) = m_b(X0idx)
m_gray(X1idx) = CDbl((m_r(X0idx) * 3735 + m_g(X0idx) * 19267 + m_b(X0idx) * 9765) / 32767)
m_confid(X1idx) = ComputeConfidence(pri_x, pri_y)
End If
Next iter_x: Next iter_y
For Y = IIf(pri_y - Winsize - 2 > 0, pri_y - Winsize - 2, 0) To IIf(pri_y + Winsize + 2 < m_height - 1, pri_y + Winsize + 2, m_height - 1): Yidx = Y * m_width: For X = IIf(pri_x - Winsize - 2 > 0, pri_x - Winsize - 2, 0) To IIf(pri_x + Winsize + 2 < m_width - 1, pri_x + Winsize + 2, m_width - 1)
m_mark(Yidx + X) = IIf(PicAr1(X, Y).rgbRed = MaskRed And PicAr1(X, Y).rgbgreen = MaskGreen And PicAr1(X, Y).rgbBlue = MaskBlue, -1, Source)
Next X: Next Y
For Y = IIf(pri_y - Winsize - 2 > 0, pri_y - Winsize - 2, 0) To IIf(pri_y + Winsize + 2 < m_height - 1, pri_y + Winsize + 2, m_height - 1): Yidx = Y * m_width: For X = IIf(pri_x - Winsize - 2 > 0, pri_x - Winsize - 2, 0) To IIf(pri_x + Winsize + 2 < m_width - 1, pri_x + Winsize + 2, m_width - 1)
If m_mark(Yidx + X) = -1 Then
Found = (Y = m_height - 1 Or Y = 0 Or X = 0 Or X = m_width - 1) Or m_mark(Yidx + X - 1) = Source Or m_mark(Yidx + X + 1) = Source Or m_mark((Y - 1) * m_width + X) = Source Or m_mark((Y + 1) * m_width + X) = Source
If Found Then: Found = False: m_mark(Yidx + X) = -2
End If
Next X: Next Y
For i = IIf(pri_y - Winsize - 3 > 0, pri_y - Winsize - 3, 0) To IIf(pri_y + Winsize + 3 < m_height - 1, pri_y + Winsize + 3, m_height - 1): Yidx = i * m_width: For j = IIf(pri_x - Winsize - 3 > 0, pri_x - Winsize - 3, 0) To IIf(pri_x + Winsize + 3 < m_width - 1, pri_x + Winsize + 3, m_width - 1)
If m_mark(Yidx + j) = -2 Then m_pri(Yidx + j) = ComputeConfidence(j, i) * ComputeData(j, i)
Next j: Next i
पूरा कोड
यहां पुस्तकालयों के स्रोत कोड के साथ टिप्पणियों के रूप में रन-सक्षम कोड है।
कोड द्वारा लागू किया गया है
inpaint(infile, outfile, blocksize, windowsize, r, g, b)
उदाहरण के रूप में शामिल हैं
;~ inpaint("gothic_in.png", "gothic_out.png")
;~ inpaint("starry_in.png", "starry_out.png")
;~ inpaint("scream_in.png", "scream_out.png")
;~ inpaint("mona_in.png", "mona_out.png")
;~ inpaint("maze_in.png", "maze_out.png")
;~ inpaint("checker_in.png", "checker_out.png")
केवल उस उदाहरण को अनइंस्टॉल करें जिसे आप CTRL+ का उपयोग करके चलाना चाहते हैं Q।
आधिकारिक टेस्ट फाइलें
इस एल्गोरिथ्म है बनाया प्रत्येक छवि के लिए समायोजित करने की। इसलिए, डिफ़ॉल्ट मान (और डिफ़ॉल्ट मास्क भी) पूरी तरह से सब-ऑप्टिमल हैं। डिफ़ॉल्ट मानों को चुना जाता है ताकि प्रत्येक नमूने को उचित समय में संसाधित किया जा सके। मैं अनियमित आकार के मुखौटे और बेहतर खिड़की के आकार के साथ खेलने की सलाह देता हूं। बड़ी करने के लिए इमेज़ पर क्लिक करें!
बिसात
→
अमेरिकन गोथिक
→
भूल भुलैया
→
मोना लीसा
→
(भयानक मुखौटा)
चीख
→
तारों से जड़ा
→
वास्तविक-विश्व उदाहरण
ये सभी कस्टम हाथ से तैयार मास्क का उपयोग करते हैं।
यदि आपके पास अन्य दिलचस्प छवियां हैं जिन्हें आप शामिल करना चाहते हैं, तो एक टिप्पणी छोड़ दें।
EBII सुधार
EBII के कई संस्करण हैं, जो विभिन्न शोधकर्ताओं द्वारा बनाए गए हैं। अंकुरकुमार पटेल ने विभिन्न ईबीआईआई सुधारों पर अपने पत्रों के संग्रह [24] के साथ मेरा ध्यान आकर्षित किया ।
विशेष रूप से कागज़ " बेहतर आधारित एल्गोरिथ्म फॉर एग्जम्पलर बेस्ड इमेज इनपैनटिंग " [२५] में प्राथमिकता के मूल्यों के वज़न पर दो सुधारों का उल्लेख है।
सुधार
प्रभावी संशोधन एल्गोरिथ्म के चरण 1 (ऊपर देखें) में है, और इस का उपयोग करके इस पिक्सेल के लिए प्राथमिकता रेटिंग पर सी (पी) और डी (पी) प्रभाव का विस्तार करता है :
सी और डी के लिए ऊपर दिए गए सूत्र में , और क्रमशः सामान्यीकरण कारक (जैसे, α = 255), आइसोफोट वेक्टर, और इकाई वेक्टर ऑर्थोगोनल बिंदु p में सामने की ओर हैं।
आगे की,
प्राथमिकता समारोह को नियमित आत्मविश्वास शब्द सी (पी) और नए डेटा शब्द डी (पी) के वजन योग के रूप में परिभाषित किया गया है । जहां α समायोजन गुणांक है, संतोषजनक 0 आरपी (पी) को परिभाषित किया गया है:
जहां α और the क्रमशः विश्वास और डेटा शर्तों के घटक भार हैं। ध्यान दें कि α + β = 1 ।
उद्देश्य स्कोरिंग
हालांकि यह वास्तव में दिलचस्प है कि इस पेपर में EBII एल्गोरिदम के प्रदर्शन को बढ़ाने के लिए एक प्रस्तावित (और सरल!) विधि है। नमक के एक दाने के साथ इसे लें, क्योंकि यह प्रस्तावित लेखकों के दृष्टिकोण और कई छवियों पर सुधार की प्रभावशीलता को सत्यापित करने के लिए खुद को कागज लेखकों द्वारा चुना गया एक तरीका है।
परिणाम का मूल्यांकन पुनश्च छवि और मूल छवि के बीच PSNR (पीक सिग्नल-टू-शोर अनुपात [26] ) की तुलना करके किया जाता है। आम तौर पर PSNR जितना अधिक होता है, उतनी ही बड़ी छवि की समानता मूल में होती है। PSNR की गणना करने के लिए समीकरण इस प्रकार है:
ये चौंका देने वाले 2 (दो!) वास्तविक-विश्व परीक्षण चित्र हैं जिनका उन्होंने उपयोग किया है:
निष्कर्ष कागज की गुणवत्ता के समान ही निराशाजनक है। यह बहुत कम सुधार दिखाता है। इस तरह की चुनौती (और अन्य छवि-मरम्मत की चुनौतियों) के लिए यहां मुख्य बात एक संभावित वस्तु स्कोरिंग विधि है:
+-------+---------------+----------+
| Image | EBII Original | Improved |
+-------+---------------+----------+
| 1 | 52.9556 | 53.7890 |
| 2 | 53.9098 | 53.8989 |
+-------+---------------+----------+
भावहीन।
अनुसंधान किया जाना है
(EBII के लिए विशिष्ट)
क) पूर्व प्रसंस्करण
सब कुछ "मैजिक इरेज़" सिद्धांत पर आता है कि एल्गोरिथ्म को हर चीज़ के लिए "बस काम" करना चाहिए। इसके लिए मेरा अनुभवहीन समाधान एक रंग-आधारित प्रवर्धन है (ऊपर देखें), लेकिन बेहतर तरीके हैं। मैं सभी ट्रेस करने योग्य टेक्सल्स के ज्यामितीय माध्य को विंडो आकार को ऑटो-एडजस्ट करने और स्टैम्प आकार (मेरा सुधार) को टेक्सल- और संपूर्ण-छवि रिज़ॉल्यूशन पर निर्भर बनाने के बारे में सोच रहा हूँ । यहां शोध किया जाना है।
बी) पोस्ट-प्रोसेसिंग
मूल लेखकों ने पहले से ही सभी पोस्ट प्रोसेसिंग फ़िल्टर को ध्यान में रखते हुए शानदार काम किया। आज, मैंने हमेशा अचेतन मोना लिसा (धन्यवाद भूमिगत) से प्रेरित होकर कुछ और करने की कोशिश की। यदि आप सिर्फ एक अभेद्य क्षेत्र लेते हैं और रंग के सभी अजीब ब्लॉकों में एक नया मुखौटा लागू करते हैं और इसे एक निराशाजनक एल्गोरिथ्म में खिलाते हैं, तो आपको लगभग पूर्ण परिणाम के साथ छोड़ दिया जाता है। मैं भविष्य में कुछ समय तक इसका पता लगा सकता हूं।
[X] - ए। क्रिमिनिसी, पी। पेरेज़, के। टोमामा
[1] - एम। एशिखमीन द्वारा एक्समप्लेयर-बेस्ड इनपैनटिंग द्वारा ऑब्जेक्ट रिमूवल । प्राकृतिक बनावट का संश्लेषण करना। प्रोक में। ACM सिम्प। इंटरएक्टिव 3 डी ग्राफिक्स, पीपी 217–226, रिसर्च ट्राएंगल पार्क, नेकां, मार्च 2001।
[5] - एम। बर्टाल्मियो, एल। वेस, जी। सैपिरो, और एस। ओशर। एक साथ संरचना और बनावट छवि inpainting। दिखाई देने के लिए, 2002
[6] - आर। बॉर्नार्ड, ई। लेकन, एल। लेबरेली और जेएच। Chenot। अभी भी छवियों और छवि दृश्यों में डेटा सुधार गायब है। एसीएम मल्टीमीडिया, फ्रांस में, दिसंबर 2002.
[7] - टीएफ चान और जे। शेन। वक्रता-चालित विक्षेप (CDD) द्वारा गैर-बनावट की अशुद्धता। जे विजुअल कॉम। छवि प्रतिनिधि।, 4 (12), 2001।
[[] - जेएस डी बोनेट। बनावट चित्रों के विश्लेषण और संश्लेषण के लिए बहुक्रिया नमूनाकरण प्रक्रिया। प्रोक में। ACM आत्मविश्वास। अनि। ग्राफिक्स (SIGGRAPH), खंड 31, पीपी। 361-368, 1997.
[9] - ए। एफ्रोस और डब्ल्यूटी फ्रीमैन। बनावट संश्लेषण और हस्तांतरण के लिए छवि रजाई। प्रोक में। ACM आत्मविश्वास। अनि। ग्राफिक्स (SIGGRAPH), पीपी। 341-346, यूजीन फिमे, 2001 अगस्त।
[10] - ए। एफ्रोस और टी। लेउंग। गैर-पैरामीट्रिक नमूना द्वारा बनावट संश्लेषण। प्रोक में। ICCV, पीपी। 1033–1038, केर्किरा, ग्रीस, 1999 सितंबर।
[11] - डब्ल्यूटी फ्रीमैन, ईसी पासज़्टर, और ओटी कारमाइकल। निम्न स्तर की दृष्टि सीखना। इंट। जे। कंप्यूटर विजन, 40 (1): 25-47, 2000.
[12] - डी। गर्बर। बनावट विश्लेषण और बनावट संश्लेषण के लिए कम्प्यूटेशनल मॉडल। पीएचडी थीसिस, यूनीव। दक्षिणी कैलिफोर्निया, संयुक्त राज्य अमेरिका, 1981।
[१३] - पी। हैरिसन जटिल बनावट के पुन: संश्लेषण के लिए एक गैर-पदानुक्रमित प्रक्रिया। प्रोक में। इंट। सम्मेलन। मध्य यूरोप COMP। ग्राफिक्स, विशुआ। और COMP। विज़न, प्लज़ेन, चेक रिपब्लिक, फरवरी 2001।
[14] - डीजे हीगर और जेआर बर्गन। पिरामिड-आधारित बनावट विश्लेषण / संश्लेषण। प्रोक में। ACM आत्मविश्वास। अनि। ग्राफिक्स (SIGGRAPH), खंड 29, पीपी। 229–233, लॉस एंजिल्स, CA, 1995.
[15] - ए। हर्ट्ज़मैन, सी। जैकब्स, एन। ओलिवर, बी। कर्ललेस, और डी। सेल्सिन। छवि उपमाएँ। प्रोक में। ACM आत्मविश्वास। अनि। ग्राफिक्स (SIGGRAPH), यूजीन
फिमे , 2001 अगस्त। [16] - एच। इगेही और एल। परेरा। बनावट संश्लेषण के माध्यम से छवि प्रतिस्थापन। प्रोक में। इंट। सम्मेलन। इमेज प्रोसेसिंग, पीपी। III: 186-190, 1997.
[17] - जी कनीज़सा। दृष्टि में संगठन। प्रेगर, न्यूयॉर्क, 1979।
[१ ९] - एल। लिआंग, सी। लिउ, वाई.- क्यू। जू, बी। गुओ, और एच। वाई। शुम। पैच-आधारित नमूने द्वारा वास्तविक समय बनावट संश्लेषण। ग्राफिक्स पर ACM लेनदेन में, 2001.
[22] - एल.डब्ल्यू। वी और एम। लेवोय। वृक्ष-संरचित वेक्टर परिमाणीकरण का उपयोग करके तेज बनावट संश्लेषण। प्रोक में। ACM आत्मविश्वास। अनि। ग्राफिक्स (SIGGRAPH), 2000.
[23] - ए। ज़लेसनी, वी। फेरारी, जी। केन और एल। वैन गूल। समानांतर समग्र बनावट संश्लेषण। बनावट में 2002 कार्यशाला -, कोपेनहेगन, डेनमार्क (ECCV02 के साथ) का जून 2002
[24] - AkurKumar पटेल, गुजरात प्रौद्योगिकी विश्वविद्यालय, कंप्यूटर विज्ञान और इंजीनियरिंग
[25] - कापी आधारित छवि Inpainting के लिए बेहतर मजबूत एल्गोरिथ्म
[26] - विकिपीडिया, पीक-सिग्नल-टू-शोर-अनुपात
inpaint.exe left top width height img.jpg
) के रूप में स्वीकार कर सकते हैं ?