Giới thiệu
Đây là một triển khai của Loại bỏ đối tượng bằng thuật toán Inpainting dựa trên Exemplar được phát triển bởi A. Criminisi, P. Perez (Cambridge Microsoft Research Ltd.) và K. Toyama (Microsoft) [X] . Thuật toán này được nhắm mục tiêu vào hình ảnh thông tin cao (và khung hình video) và nhằm mục đích là sự cân bằng giữa tái cấu trúc và tái cấu trúc hữu cơ. Đoạn của câu trả lời này chứa các trích dẫn toàn văn từ bài báo gốc (vì nó không còn chính thức nữa) để làm cho câu trả lời này trở nên khép kín hơn.
Thuật toán
Mục tiêu : Thay thế một khu vực ( mặt nạ ) đã chọn ( tốt nhất là một đối tượng tiền cảnh được phân tách trực quan) bằng các hình nền hợp lý trực quan.
Trong công việc trước đây, một số nhà nghiên cứu đã coi tổng hợp kết cấu như một cách để lấp đầy các vùng hình ảnh lớn với kết cấu "thuần túy" - các mẫu kết cấu hai chiều lặp đi lặp lại với độ ngẫu nhiên vừa phải. Điều này dựa trên một cơ thể lớn của nghiên cứu tổng hợp kết cấu, tìm cách tái tạo kết cấu quảng cáo infinitum , đưa ra một mẫu nguồn nhỏ của kết cấu tinh khiết [1] [8] [9] [10] [11] [12] [14] [15] [16] [19] [22] .
Hiệu quả như các kỹ thuật này trong việc tái tạo kết cấu nhất quán, chúng gặp khó khăn trong việc lấp đầy các lỗ hổng trong các bức ảnh về cảnh trong thế giới thực, thường bao gồm các cấu trúc tuyến tính và kết cấu tổng hợp - nhiều kết cấu tương tác không gian [23] . Vấn đề chính là ranh giới giữa các vùng hình ảnh là một sản phẩm phức tạp của ảnh hưởng lẫn nhau giữa các kết cấu khác nhau. Trái ngược với bản chất hai chiều của kết cấu thuần túy, các ranh giới này tạo thành những gì có thể được coi là cấu trúc hình ảnh một chiều hoặc tuyến tính hơn.
Hình ảnh inpainting kỹ thuật điền vào lỗ hổng trong hình ảnh bằng cách tuyên truyền cấu trúc tuyến tính (gọi tắt là isophotes trong inpainting văn học) vào khu vực mục tiêu thông qua sự khuếch tán. Chúng được lấy cảm hứng từ các phương trình vi phân từng phần của dòng nhiệt vật lý và hoạt động thuyết phục như các thuật toán phục hồi. Hạn chế của họ là quá trình khuếch tán giới thiệu một số mờ, đáng chú ý.
Vùng cần điền, nghĩa là vùng đích được biểu thị bằng và đường viền của nó được ký hiệu là. Đường viền phát triển vào bên trong khi thuật toán tiến triển, và vì vậy chúng tôi cũng gọi nó là đường viền điền vào trước. Vùng nguồn,, vẫn cố định trong suốt thuật toán, cung cấp các mẫu được sử dụng trong quy trình điền. Bây giờ chúng tôi tập trung vào một lần lặp duy nhất của thuật toán để chỉ ra cách cấu trúc và kết cấu được xử lý đầy đủ bằng cách tổng hợp dựa trên mẫu. Giả sử rằng mẫu hình vuông Ψp ∈ Ω tập trung tại điểm p (hình 2b), sẽ được điền. Mẫu phù hợp nhất từ vùng nguồn đến từ bản vá qˆ ∈, tương tự nhất với các phần đã được điền vào Ψp. Trong ví dụ trong hình. 2b, chúng ta thấy rằng nếu Ψp nằm trên phần tiếp theo của cạnh hình ảnh, các trận đấu tốt nhất có khả năng nhất sẽ nằm dọc theo cùng một cạnh (hoặc có cùng màu) (ví dụ: Ψq 'và Ψq' 'trong hình. 2c). Tất cả những gì được yêu cầu để truyền isophote vào bên trong là việc chuyển mẫu đơn giản từ bản vá nguồn phù hợp nhất (hình 2d). Lưu ý rằng định hướng isophote được bảo quản tự động. Trong hình, mặc dù thực tế là cạnh ban đầu không trực giao với đường viền đích, cấu trúc lan truyền vẫn duy trì hướng tương tự như trong vùng nguồn.
Chi tiết triển khai và thuật toán
Chức năng của việc triển khai này được gói gọn trong một ActiveX COM COM ActiveX được loại bỏ khỏi chương trình máy chủ dưới dạng nhị phân và sau đó được gọi một cách nhanh chóng bằng cách gọi Ipai bằng inpainter. Trong trường hợp cụ thể này, API được viết bằng VisualBasic và có thể được gọi từ bất kỳ ngôn ngữ hỗ trợ COM nào. Phần sau của mã giảm nhị phân:
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
Thư viện sau đó được khởi tạo bằng CLSID và IID:
Local $hInpaintLib = DllOpen("inpaint.dll")
Local $oInpaintLib = ObjCreate("{3D0C8F8D-D246-41D6-BC18-3CF18F283429}", "{2B0D9752-15E8-4B52-9569-F64A0B12FFC5}", $hInpaintLib)
Thư viện chấp nhận xử lý GDIOB DỰ ÁN, cụ thể là DIBSection của bất kỳ bitmap GDI / + nào (tệp, luồng, v.v.). Tệp hình ảnh đã chỉ định được tải và được vẽ lên một bitmap trống được xây dựng Scan0
từ các kích thước hình ảnh đầu vào.
Tệp đầu vào cho việc triển khai này là bất kỳ định dạng tệp tương thích GDI / + nào chứa dữ liệu hình ảnh bị che. (Các) mặt nạ là một hoặc nhiều vùng có màu đồng nhất trong ảnh đầu vào. Người dùng cung cấp giá trị màu RGB cho mặt nạ, chỉ các pixel có chính xác giá trị màu đó sẽ được khớp. Màu mặt nạ mặc định là màu xanh lá cây (0, 255, 0). Tất cả các vùng bị che cùng nhau đại diện cho vùng đích, Ω, sẽ bị xóa và điền. Vùng nguồn, Φ, được định nghĩa là toàn bộ hình ảnh trừ đi vùng đích (= I −).
Tiếp theo, như với tất cả các tổng hợp kết cấu dựa trên mẫu [10] , kích thước của cửa sổ mẫu (còn gọi là " bán kính quét ") phải được chỉ định. Việc triển khai này cung cấp kích thước cửa sổ mặc định là 6² pixel, nhưng trong thực tế, người dùng yêu cầu người dùng phải đặt nó lớn hơn một chút so với thành phần kết cấu có thể phân biệt lớn nhất, hoặc tex texel, trong khu vực nguồn. Một sửa đổi bổ sung cho thuật toán ban đầu là " kích thước khối " có thể xác định được của người dùng , xác định vùng pixel sẽ được thay thế bằng màu đồng nhất mới. Điều này làm tăng tốc độ và giảm chất lượng. Kích thước khối geater lớn hơn 1px có nghĩa là được sử dụng với các khu vực cực kỳ đồng đều (nước, cát, lông, v.v.), tuy nhiên, nên được giữ ở mức tối đa. .5x kích thước khối (có thể là không thể tùy thuộc vào mặt nạ).
Để không trì hoãn thuật toán trên hình ảnh 1 bit, mỗi khi nhận được hình ảnh có ít hơn 5 màu, kích thước cửa sổ được khuếch đại lên gấp 10 lần.
Khi các tham số này được xác định, phần còn lại của quy trình điền vào khu vực là hoàn toàn tự động. Trong thuật toán của chúng tôi, mỗi pixel duy trì một giá trị màu (hoặc trống rỗng, nếu pixel không được lấp đầy) và giá trị độ tin cậy, phản ánh niềm tin của chúng tôi vào giá trị pixel và bị đóng băng sau khi pixel được lấp đầy. Trong quá trình thuật toán, các bản vá dọc theo mặt trước điền cũng được đưa ra một giá trị ưu tiên tạm thời, xác định thứ tự mà chúng được điền. Sau đó, thuật toán của chúng tôi lặp lại ba bước sau cho đến khi tất cả các pixel được lấp đầy.
Bước 1: Tính toán ưu tiên bản vá
Thứ tự điền rất quan trọng đối với tổng hợp kết cấu không tham số [1] [6] [10] [13] . Cho đến nay, yêu thích mặc định là phương pháp vỏ hành tây của hành tinh, trong đó vùng đích được tổng hợp từ bên ngoài vào trong, trong các lớp đồng tâm. Thuật toán của chúng tôi thực hiện nhiệm vụ này thông qua thuật toán điền đầu tiên tốt nhất phụ thuộc hoàn toàn vào các giá trị ưu tiên được gán cho mỗi bản vá ở mặt trước điền. Tính toán ưu tiên được thiên về các miếng vá nằm trên các cạnh mạnh và được bao quanh bởi các pixel có độ tin cậy cao, các pixel này là ranh giới, được đánh dấu bằng giá trị -2. Đoạn mã sau tính toán lại các ưu tiên:
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
Đưa ra một bản vá centeredp tập trung tại điểm p cho một số p ∈ (xem hình 3), mức ưu tiên P (p) của nó được định nghĩa là sản phẩm của độ tin cậy được tính toán ( ComputeConfidence
hoặc C (p) ) và thuật ngữ dữ liệu ( ComputeData
, hoặc D (p) ), trong đó
, Ở đâu
| |p | là diện tích của Ψp, α là hệ số chuẩn hóa (ví dụ: α = 255 cho hình ảnh mức xám điển hình) và np là một vectơ đơn vị trực giao ở phía trước δΩ trong điểm p. Mức độ ưu tiên được tính cho mọi bản vá viền, với các bản vá riêng biệt cho từng pixel trên đường biên của vùng mục tiêu.
Thực hiện như
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
Thuật ngữ độ tin cậy C (p) có thể được coi là thước đo lượng thông tin đáng tin cậy xung quanh pixel p. Mục đích là để lấp đầy những bản vá đầu tiên có nhiều pixel của chúng hơn, với ưu tiên bổ sung được cung cấp cho các pixel được lấp đầy sớm (hoặc không bao giờ là một phần của vùng mục tiêu).
Điều này tự động kết hợp ưu tiên đối với các hình dạng nhất định dọc theo mặt trước điền. Ví dụ, các bản vá bao gồm các góc và các đường gân mỏng của vùng đích sẽ có xu hướng được lấp đầy trước tiên, vì chúng được bao quanh bởi nhiều pixel hơn từ ảnh gốc. Những bản vá này cung cấp thông tin đáng tin cậy hơn để phù hợp với. Ngược lại, các bản vá ở đầu Penins công thức Các pixel được lấp đầy nhô vào vùng đích sẽ có xu hướng được đặt sang một bên cho đến khi nhiều pixel xung quanh được điền vào. Ở mức độ thô, thuật ngữ C (p) của (1) xấp xỉ thực thi lệnh điền đồng tâm mong muốn.
Khi tiến hành điền, các pixel ở các lớp bên ngoài của vùng đích sẽ có xu hướng được đặc trưng bởi các giá trị độ tin cậy cao hơn và do đó được điền trước đó; pixel ở trung tâm của vùng mục tiêu sẽ có giá trị độ tin cậy thấp hơn. Thuật ngữ dữ liệu D (p) là một hàm của cường độ của các isophotes chạm vào phía trước tại mỗi lần lặp. Thuật ngữ này tăng mức độ ưu tiên của một bản vá mà một isophote "chảy" vào. Yếu tố này có tầm quan trọng cơ bản trong thuật toán của chúng tôi vì nó khuyến khích các cấu trúc tuyến tính được tổng hợp trước, và do đó được truyền bá an toàn vào vùng mục tiêu. Các đường gãy có xu hướng kết nối, do đó hiện thực hóa "Nguyên tắc kết nối" của tâm lý học tầm nhìn [7] [17] .
Thứ tự điền phụ thuộc vào thuộc tính hình ảnh, dẫn đến quá trình tổng hợp hữu cơ giúp loại bỏ nguy cơ các tạo tác cấu trúc bị phá vỡ và cũng làm giảm các tạo tác khối mà không cần bước cắt vá đắt tiền [9] hoặc bước trộn mờ gây ra [19] ] .
Bước 2: Tuyên truyền thông tin về kết cấu và cấu trúc
Khi tất cả các ưu tiên trên mặt trước điền ( ranh giới ) đã được tính toán, bản vá pˆ với mức ưu tiên cao nhất được tìm thấy. Sau đó chúng tôi điền nó với dữ liệu được trích xuất từ vùng nguồn. Chúng tôi tuyên truyền kết cấu hình ảnh bằng cách lấy mẫu trực tiếp của khu vực nguồn. Tương tự như [10] , chúng tôi tìm kiếm trong vùng nguồn cho bản vá đó tương tự như pˆ. Chính thức
, Ở đâu
khoảng cách d (a, Ψb) giữa hai bản vá chung Ψa và Ψb được định nghĩa đơn giản là tổng số chênh lệch bình phương (SSD) của các pixel đã được lấp đầy trong hai bản vá. Không có phân tích hoặc thao tác thêm ( đặc biệt là không làm mờ ) được thực hiện trong bước này. Tính toán này chạy trong vòng lặp chu kỳ chính và được thực hiện như sau:
Lấy ưu tiên tối đa:
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
Tìm bản vá tương tự nhất:
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
Bước 3: Cập nhật giá trị độ tin cậy
Sau khi bản vá pˆ được lấp đầy bằng các giá trị pixel mới, độ tin cậy C (p) được cập nhật trong khu vực được giới hạn bởi Ψpˆ như sau:
Quy tắc cập nhật đơn giản này cho phép chúng tôi đo lường độ tin cậy tương đối của các bản vá ở mặt trước, không có thông số cụ thể về hình ảnh. Khi tiến hành điền, giá trị độ tin cậy bị phân rã, chỉ ra rằng chúng ta ít chắc chắn hơn về các giá trị màu của các pixel gần trung tâm của vùng đích. Được triển khai tại đây (cùng với tất cả các cập nhật cần thiết khác):
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
Mã hoàn chỉnh
Đây là mã có thể chạy, hoàn thành với mã nguồn của thư viện dưới dạng nhận xét.
Mã được gọi bởi
inpaint(infile, outfile, blocksize, windowsize, r, g, b)
Ví dụ được bao gồm trong các hình thức
;~ 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")
chỉ cần bỏ qua ví dụ bạn muốn chạy bằng CTRL+ Q.
Hồ sơ kiểm tra chính thức
Thuật toán này được thực hiện để được điều chỉnh cho mỗi hình ảnh. Do đó, các giá trị mặc định (và cả mặt nạ mặc định) là hoàn toàn tối ưu. Các giá trị mặc định được chọn sao cho mọi mẫu có thể được xử lý trong một khoảng thời gian hợp lý. Tôi rất khuyên bạn nên chơi với mặt nạ có hình dạng bất thường và kích thước cửa sổ tốt hơn. Nhấp vào hình ảnh để phóng to!
Bàn cờ
→
Mỹ gothic
→
mê cung
→
nàng mô na Li Sa
→
(mặt nạ khủng khiếp)
Hét lên
→
Đầy sao
→
Ví dụ thực tế
Tất cả đều sử dụng mặt nạ vẽ tay tùy chỉnh.
Nếu bạn có những hình ảnh thú vị khác mà bạn muốn xem kèm theo, hãy để lại nhận xét.
Cải tiến EBII
Có nhiều biến thể của EBII ngoài kia, được tạo ra bởi các nhà nghiên cứu khác nhau. AnkurKumar Patel thu hút sự chú ý của tôi với bộ sưu tập giấy tờ của ông [24] về các cải tiến EBII khác nhau.
Cụ thể, bài viết " Cải tiến thuật toán mạnh mẽ cho hình ảnh dựa trên mẫu mực " [25] đề cập đến hai cải tiến về việc cân nhắc các giá trị ưu tiên.
Sự cải thiện
Việc sửa đổi hiệu quả nằm ở Bước 1 (xem bên trên) của thuật toán và mở rộng hiệu ứng C (p) và D (p) trên xếp hạng ưu tiên cho pixel này bằng cách sử dụng:
Trong công thức của C và D đã cho ở trên, và tương ứng là hệ số chuẩn hóa (ví dụ: α = 255), vectơ isophote và vectơ đơn vị trực giao ở phía trước trong điểm p.
Thêm nữa,
Hàm ưu tiên được định nghĩa là tổng trọng số của thuật ngữ tin cậy thường xuyên C (p) và thuật ngữ dữ liệu mới D (p) . Trong đó α là hệ số điều chỉnh, thỏa mãn 0Rp (p) được xác định như sau:
Trong đó α và respectively tương ứng là các trọng số thành phần của độ tin cậy và các điều khoản dữ liệu. Lưu ý rằng α + = 1 .
Ghi điểm khách quan
Điều thực sự thú vị là bài báo này chứa một phương pháp được đề xuất (và đơn giản!) Để chấm điểm hiệu suất nếu thuật toán EBII. Mặc dù vậy, hãy thực hiện điều này với một hạt muối, vì đây là phương pháp được lựa chọn bởi chính các tác giả giấy để xác minh tính hiệu quả của phương pháp phương sai được đề xuất và cải thiện trên một số hình ảnh.
Việc đánh giá kết quả được thực hiện bằng cách so sánh PSNR (Tỷ lệ nhiễu tín hiệu cực đại [26] ) giữa hình ảnh được khôi phục và hình ảnh gốc. Nói chung, giá trị PSNR càng cao thì độ tương tự của hình ảnh được sửa chữa với bản gốc càng lớn. Phương trình tính PSNR như sau:
Đây là những hình ảnh thử nghiệm trong thế giới thực 2 (hai!) Đáng kinh ngạc mà họ đã sử dụng:
Kết luận cũng đáng thất vọng như chính chất lượng của bài báo. Nó cho thấy rất ít cải thiện. Điều chính ở đây là một phương pháp chấm điểm đối tượng khả thi cho loại thử thách này (và các thử thách sửa chữa hình ảnh khác):
+-------+---------------+----------+
| Image | EBII Original | Improved |
+-------+---------------+----------+
| 1 | 52.9556 | 53.7890 |
| 2 | 53.9098 | 53.8989 |
+-------+---------------+----------+
Meh.
Nghiên cứu được thực hiện
(Cụ thể cho EBII)
a) Tiền xử lý
Mọi thứ bắt nguồn từ nguyên tắc "Magic Erase" rằng thuật toán sẽ "chỉ hoạt động" cho mọi thứ. Giải pháp ngây thơ của tôi cho điều này là khuếch đại dựa trên màu sắc (xem ở trên), nhưng có nhiều cách tốt hơn. Tôi đang nghĩ đến việc nhận ra giá trị trung bình hình học của tất cả các tex có thể theo dõi để tự động điều chỉnh kích thước cửa sổ và làm cho kích thước tem (cũng là cải tiến của tôi) phụ thuộc vào độ phân giải toàn bộ hình ảnh và toàn bộ hình ảnh. Nghiên cứu phải được thực hiện ở đây.
b) Hậu xử lý
Các tác giả ban đầu đã làm rất tốt việc gỡ lỗi tất cả các bộ lọc xử lý bài đăng trong tâm trí. Hôm nay, tôi đã thử một cái gì đó khác, lấy cảm hứng từ Mona Lisa luôn luôn kỳ lạ (cảm ơn ngầm). Nếu bạn chỉ lấy vùng không được tô màu và áp dụng mặt nạ mới cho tất cả các khối màu lạ và đưa vào thuật toán xem thường, bạn sẽ có kết quả gần như hoàn hảo. Tôi có thể khám phá điều này một thời gian trong tương lai.
[X] - Loại bỏ đối tượng bằng cách khai thác dựa trên mẫu mực của A. Criminisi, P. Perez, K. Toyama
[1] - M. Ashikhmin. Tổng hợp kết cấu tự nhiên. Trong Proc. Biểu tượng ACM. trên Đồ họa 3D tương tác, trang 217 Từ226, Công viên tam giác nghiên cứu, NC, tháng 3 năm 2001.
[5] - M. Bertalmio, L. Vese, G. Sapiro và S. Osher. Cấu trúc đồng thời và hình ảnh kết cấu inpainting. xuất hiện, 2002
[6] - R. Bornard, E. Lecan, L. Labelli và JH. Chenot. Thiếu chỉnh sửa dữ liệu trong các hình ảnh tĩnh và chuỗi hình ảnh. Trong ACM đa phương tiện, Pháp, tháng 12 năm 2002.
[7] - TF Chan và J. Shen. Không kết cấu không xuất hiện bởi các khuếch tán theo hướng cong (CDD). J. Thị giác. Đại diện hình ảnh, 4 (12), 2001.
[8] - JS de Bonet. Quy trình lấy mẫu đa biến để phân tích và tổng hợp hình ảnh kết cấu. Trong Proc. ACM Conf. Comp. Đồ họa (SIGGRAPH), tập 31, trang 361 Tiết368, 1997.
[9] - A. Efros và WT Freeman. Quilting hình ảnh để tổng hợp kết cấu và chuyển giao. Trong Proc. ACM Conf. Comp. Đồ họa (SIGGRAPH), trang 341 Đi346, Eugene Fiume, tháng 8 năm 2001.
[10] - A. Efros và T. Leung. Tổng hợp kết cấu bằng cách lấy mẫu không tham số. Trong Proc. ICCV, trang 1033 Từ1038, Kerkyra, Hy Lạp, tháng 9 năm 1999.
[11] - WT Freeman, EC Pasztor, và OT Carmichael. Học tầm nhìn thấp. Nội bộ J. Thị giác máy tính, 40 (1): 25 Ném47, 2000.
[12] - D. Garber. Mô hình tính toán để phân tích kết cấu và tổng hợp kết cấu. Luận án tiến sĩ, Univ. Nam California, Hoa Kỳ, 1981.
[13] - P. Harrison. Một thủ tục không phân cấp để tổng hợp lại kết cấu phức tạp. Trong Proc. Nội bộ Conf. Trung Âu Comp. Đồ họa, Visua. và Comp. Vision, Plzen, Cộng hòa Séc, tháng 2 năm 2001.
[14] - DJ Heeger và JR Bergen. Phân tích / tổng hợp kết cấu dựa trên kim tự tháp. Trong Proc. ACM Conf. Comp. Đồ họa (SIGGRAPH), tập 29, trang 229 Từ233, Los Angeles, CA, 1995.
[15] - A. Hertzmann, C. Jacobs, N. Oliver, B. Curless và D. Salesin. Tương tự hình ảnh. Trong Proc. ACM Conf. Comp. Đồ họa (SIGGRAPH), Eugene Fiume, tháng 8 năm 2001.
[16] - H. Igehy và L. Pereira. Thay thế hình ảnh thông qua tổng hợp kết cấu. Trong Proc. Nội bộ Conf. Xử lý ảnh, trang III: 186 Hàng190, 1997.
[17] - G. Kanizsa. Tổ chức trong Tầm nhìn. Praeger, New York, 1979.
[19] - L. Liang, C. Liu, Y.-Q. Xu, B. Guo và H.-Y. Shum. Tổng hợp kết cấu thời gian thực bằng cách lấy mẫu dựa trên bản vá. Trong Giao dịch ACM trên Đồ họa, 2001.
[22] - L.-W. Wey và M. Levoy. Tổng hợp kết cấu nhanh bằng cách sử dụng lượng tử hóa vector cấu trúc cây. Trong Proc. ACM Conf. Comp. Đồ họa (SIGGRAPH), 2000.
[23] - A. Zalesny, V. Ferrari, G. Caenen và L. van Gool. Tổng hợp kết cấu song song. Trong hội thảo Texture 2002 - (kết hợp với ECCV02), Copenhagen, Đan Mạch, tháng 6 năm 2002.
[24] - AkurKumar Patel, Đại học Công nghệ Gujarat, Khoa học và Kỹ thuật Máy tính
[25] - Thuật toán mạnh mẽ được cải tiến cho hình ảnh dựa trên mẫu mực
[26] - Wikipedia, Tỷ lệ tín hiệu-nhiễu-nhiễu
inpaint.exe left top width height img.jpg
)?