Я работаю над патч-методом для обработки изображения. Таким образом, результат страдает от блочного артефакта.
Текущие общедоступные методы (или только то, что я могу найти) фокусируются на одном сжатом изображении, таком как jpeg, и пытаются разблокировать их артефакт и восстановить их чистую версию.
Однако у меня есть полный контроль, чтобы решить, где должен появиться блочный артефакт.
Например, если у нас есть изображение с размером (16, 16), и у нас есть размер патча (8, 8), то 4 артефакта block-y будут отображаться в виде линии между патчами следующим образом:
.x→0123456789012345...
y image A
↓
0 ////////\\\\\\\\
1 ////////\\\\\\\\
2 ////////\\\\\\\\
3 ////////\\\\\\\\
4 ////1///\\\\2\\\
5 ////////\\\\\\\\
6 ////////\\\\\\\\
7 ////////\\\\\\\\
8 \\\\\\\\////////
9 \\\\\\\\////////
0 \\\\\\\\////////
1 \\\\3\\\///4////
2 \\\\\\\\////////
3 \\\\\\\\////////
4 \\\\\\\\////////
5 \\\\\\\\////////
И говоря: «У меня есть полный контроль над блоком». Это означает, что я могу предварительно дополнить изображение нулями, равными половине ширины и высоты размера патча. Таким образом, в результате 9 блочных артефактов будут:
.x→0123456789012345... .x→0123456789012345...
y y image B
↓ ↓
0 0000000000000000 0 1+++***2****+++3
1 0000000000000000 1 ++++********++++
2 0000000000000000 2 ++++********++++
3 0000000000000000 3 ++++********++++
4 00001+++***2**** remove padding 4 ****++++++++****
5 0000++++******** → 5 ****++++++++****
6 0000++++******** 6 ****++++++++****
7 0000++++******** 7 4***++++5+++***6
8 0000****++++++++ 8 ****++++++++****
9 0000****++++++++ 9 ****++++++++****
0 0000****++++++++ 0 ****++++++++****
1 00004***++++5+++ 1 ****++++++++****
2 0000****++++++++ 2 ++++********++++
3 0000****++++++++ 3 ++++********++++
4 0000****++++++++ 4 ++++********++++
5 0000****++++++++ 5 7+++***8****+++9
Поскольку «линии» на изображении B теперь смещены на 4 и расположены справа между строками, появляются на изображении A.
Здесь возникает реальный вопрос. Есть ли какой-нибудь алгоритм для разблокировки изображения A и B вместе?
Моя первая наивная мысль - сделать маску в виде чеков в форме галочки, а затем объединить два изображения. Таким образом, результат будет:
.x→0123456789012345... .x→0123456789012345...
y image A and B y
↓ ↓
0 AAAAAAAAAAAAAAAA 0 ////////\\\\\\\\
1 AAAAAAABBAAAAAAA 1 ///////**\\\\\\\
2 AAAAAABBBBAAAAAA 2 //////****\\\\\\
3 AAAAABBBBBBAAAAA 3 /////******\\\\\
4 AAAABBBBBBBBAAAA 4 ////++++++++\\\\
5 AAABBBBBBBBBBAAA 5 ///*++++++++*\\\
6 AABBBBBBBBBBBBAA 6 //**++++++++**\\
7 ABBBBBBBBBBBBBBA 7 /***++++++++***\
8 ABBBBBBBBBBBBBBA 8 \***++++++++***/
9 AABBBBBBBBBBBBAA 9 \\**++++++++**//
0 AAABBBBBBBBBBAAA 0 \\\*++++++++*///
1 AAAABBBBBBBBAAAA 1 \\\\********////
2 AAAAABBBBBBAAAAA 2 \\\\\******/////
3 AAAAAABBBBAAAAAA 3 \\\\\\****//////
4 AAAAAAABBAAAAAAA 4 \\\\\\\**///////
5 AAAAAAAAAAAAAAAA 5 \\\\\\\\////////
И тогда я понимаю, что это не сотрет артефакт, а станет еще меньшим блоком (если мы предположим, что грань между А и В гладкая) следующим образом:
.x→0123456789012345...
y finale image
↓
0 ****************
1 ****************
2 ****************
3 ****************
4 ***––––––––––***
5 ***∣*********∣***
6 ***∣*********∣***
7 ***∣*********∣***
8 ***∣*********∣***
9 ***∣*********∣***
0 ***∣*********∣***
1 ***––––––––––***
2 ****************
3 ****************
4 ****************
5 ****************
Так что я был как "давай, должно быть, есть лучший путь" и пришел сюда в поисках помощи.