powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Наложение серии изображений
16 сообщений из 166, страница 7 из 7
Наложение серии изображений
    #39898882
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Целочисленные операции заменил на double. Нормализованные в диапазоне от 0.0 до 1.0.
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39898895
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если считать бордюр не прямоугольником а трапецией то вроде все норм должно быть.
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899000
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98

Я крашу бордюр так:
левый -правый-верх-низ. Все полностью, поэтому квадранты получаются в два прохода.
А в квадрантах нулевые начальные условия. Идея в том, чтобы задать их значением угловой точки. В моём случае это 3 вертикальных "уса" по углам. Мои усы толщиной в 2,5 точки, если б брал в глубину 1, то и толщины уса достаточно==1.

Картинка с бордюром выше сделана, кроме того с повторной покраской, т.е. углы вообще в 4 прохода. А сейчас задал усики, и за один проход без артефактов, почти не отличимо от предыдущего, зато и гладкость углов почти безупречная (если не точки не являются скачками - это проблема фотографа).
То же самое со всеми рисунками, что раньше делал.
Пока не выкладываю. А нужно ли? поверьте просто на слово ...

Это тоже на Мат-лабе? Есть сорцы?
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899019
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А як же?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
brd=128; br= brd/2; B1= zeros(size(A0)+[brd,brd,0]);
%% Инициализировать угловые вертикальные Усы
for k= 1:3
  B1(1:br, br+1:br+3, k)= A0(1,1,k);  B1(end-br-3+1:end,  br+1:br+3, k)= A0(end,1, k);
end;
for k= 1:3
  B1(1:br, end-br-3+1:end-br, k)= A0(1,end,k);  B1(end-br-3+1:end, end-br-3+1:end-br, k)= A0(end,end, k);
end;

...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899021
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
...то вроде все норм ...
Согласен. Кста, оппозитные тона косвенно говорят о правильном применении симметричной маски.
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899024
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
А як же?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
brd=128; br= brd/2; B1= zeros(size(A0)+[brd,brd,0]);
%% Инициализировать угловые вертикальные Усы
for k= 1:3
  B1(1:br, br+1:br+3, k)= A0(1,1,k);  B1(end-br-3+1:end,  br+1:br+3, k)= A0(end,1, k);
end;
for k= 1:3
  B1(1:br, end-br-3+1:end-br, k)= A0(1,end,k);  B1(end-br-3+1:end, end-br-3+1:end-br, k)= A0(end,end, k);
end;


Чувак я здесь ничо не понял. Давай это ... займемся техническим переводом. :)
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899032
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"А почитать?"(цэ) дежурная шутка других разделов.
Начинаем урок, садитесь.
А0() изображение, nxnx3 3= (rgb)
B1() оно же с бордюром, бордюр инициализируется 0.
затем была пропущена вот эта строка:
B1(br+1:end-br, br+1:end-br, :)= A0; - впендюрить A0() внутрь B1().
Ну а затем циклы рисуют вертикальные отрезки-усы как продолжение боковых сторон А0(). Приходится каждую координату РГБ загонять в матрицу самостоятельно.

Первый цикл рисует левые отрезки, 2-й -- правые. Толщина отрезков ==3, поскольку маска 3х3, т.е. 3 т. в глубину.
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899035
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ещё пояснить про "end" внутри. B1(1:br, end-br-3+1:end-br, k)
В контексте индекса массивов он заменяет макс. значение размерности, все массивы начинаются с 1.
size(А, 1) - кол-во строк, size(А, 2) - кол-во столбов, size(А, 3) - кол-во третьего измерения (страницы) ... В нашем случае 3-е измерение == РГБ.
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899036
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ойвей я почувствовал себя студентом.
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899037
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выше плохо написал
авторциклы рисуют вертикальные отрезки Циклы делают это для каждого из 3-х цветов. А собственно заполнение выполняется неявным циклом вида
B1(1:br, br+1:br+3, k) , где выражение (а:в) означает перебор от а до в .
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899043
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Ойвей я почувствовал себя студентом.
если делать это в командном окне (в диалоге, в сочетании с прогоном и т.п.), можно тут же посмотреть картинку figure, imshow( cast(B1,'uint8'), [], 'InitialMagnification','fit');

В барсике похожие возможности диалоговой отладки.
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899381
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Признаюсь честно что я пока не знаю как применить твой исходник. Он настолько сильно отличается
что даже об адаптации речь не идет.

Посмотри сам. Тут мост - длиной в бесконечность. Возможно другая формула была-бы более уместна.

Исходник стартует с моего фильтра и заканчивается фрагментом где надо заполнить угловые квадранты.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
    @Override
    public BufferedImage doFilter(@NotNull BufferedImage src, @Nullable Map<String, Object> parameters) {
        int bs = (Integer) parameters.get("borderSize");
        checkArgument(bs > 0);
        int x = src.getWidth();
        int y = src.getHeight();
        logger.trace(":: detect input image size : {} x {} and colorModel = {}",x, y, src.getColorModel());
        int xr = x + 2 * bs;
        int yr = y + 2 * bs;
        BufferedImage dest = new BufferedImage(xr, yr, BufferedImage.TYPE_INT_ARGB);
        Raster.copyImageIntoPos(src, dest, bs, bs);
        // Left
        for (int j = bs; j > 0; j--) {
            for (int i = 1 + bs; i < yr - 1 - bs; i++) {
                int pixel1 = dest.getRGB(j, i - 1);
                int pixel2 = dest.getRGB(j, i);
                int pixel3 = dest.getRGB(j, i + 1);
                int res = Raster.avgPixel(pixel1, pixel2, pixel3);
                dest.setRGB(j - 1, i, res);
            }
        }

        // Right
        for (int j = bs + x - 1; j < xr - 1; j++) {
            for (int i = 1 + bs; i < yr - 1 - bs; i++) {
                int pixel1 = dest.getRGB(j, i - 1);
                int pixel2 = dest.getRGB(j, i);
                int pixel3 = dest.getRGB(j, i + 1);
                int res = Raster.avgPixel(pixel1, pixel2, pixel3);
                dest.setRGB(j + 1, i, res);
            }
        }

        // Top
        for (int i = bs; i > 0; i--) {
            for (int j = 1 + bs; j < xr - 1 - bs; j++) {
                int pixel1 = dest.getRGB(j - 1, i);
                int pixel2 = dest.getRGB(j,     i);
                int pixel3 = dest.getRGB(j + 1, i);
                int res = Raster.avgPixel(pixel1, pixel2, pixel3);
                dest.setRGB(j, i - 1, res);
            }
        }

        // Bottom
        for (int i = y + bs; i < yr; i++) {
            for (int j = 1 + bs; j < xr - 1 - bs; j++) {
                int pixel1 = dest.getRGB(j - 1, i - 1);
                int pixel2 = dest.getRGB(j,     i - 1);
                int pixel3 = dest.getRGB(j + 1, i - 1);
                int res = Raster.avgPixel(pixel1, pixel2, pixel3);
                dest.setRGB(j, i, res);
            }
        }
        // TODO: Implement all border directions
        // brd=128; br= brd/2; B1= zeros(size(A0)+[brd,brd,0]);
        //%% Инициализировать угловые вертикальные Усы
        //for k= 1:3
        //  B1(1:br, br+1:br+3, k)= A0(1,1,k);  B1(end-br-3+1:end,  br+1:br+3, k)= A0(end,1, k);
        //end;
        //for k= 1:3
        //  B1(1:br, end-br-3+1:end-br, k)= A0(1,end,k);  B1(end-br-3+1:end, end-br-3+1:end-br, k)= A0(end,end, k);
        //end;
        return dest;
    }
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899441
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем его применять? я полагал, что он нужен , чтобы формализовать предшествовавший поток сознания. Насчёт того где применять, надо сперва изменить собственное сознание.
На мой взгляд не надо было с самого начала выделять квадранты во что-то отдельное по заполнению. Лично я и не выделял.

Поэтому, если брать мою идею, то придётся менять везд, егде есть типа
Код: java
1.
for (int i = 1 + bs; i < yr - 1 - bs; i++)

На что менять? Циклы начинать с
int i = 1 (или как там правильно, чтобы не выйти за границы dest)
Заканчивать циклы аналогично. Т.о. каждый квадрант красится по 2 раза. Йес? Я об этом тоже писал.
Но! повторяю первая итерация покраски
int pixel1 = dest.getRGB(j, i - 1); при for (int j = bs; (аналогично на другой стороне рисунка) тогда бы в квадрантах обращалась к месту, заранее не заполненному.
Я предложил заранее это место заполнять отрезками длиной bs . Можно сразу все 4 отрезка нарисовать, можно непосредственно перед каждой стороной. (когда эти отрезки будут краситься уже в перпендикулярном направлении, они не повлияют и забьются нужными величинами).

Т.о. как только выполнено
Код: java
1.
Raster.copyImageIntoPos(src, dest, bs, bs)

; можно рисовать в dest эти отрезки.

Направление отрезков, очевидно зависит от последовательности закраски бордюров. Оо, блин! у меня в той же последовательности, я рисовал вертикальные отрезки.

Не хошь так - я не настаиваю. Эх, без маленькой картинки не обойтись.
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899446
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так (в остальных углах аналогично вертикально) если браузер не зависнет сейчас
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899670
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое тяжелое нудоство в графике это проверки краевых случаев. Вырожденные случаи. Выходы за границы
диапазонов. И некоторые внутренние договорняки.

Эти договорённости разработчик заключает сам с собой чтобы определить как ведут себя примитивы.
Я минут 30 рассуждал сам с собой что должна возвращать функция которая делает пересечение
двух прямоугольников. Должна она вернуть null, или какой-то особый empty-прямоугольник?
Это головная боль потому что это контракт который потащит за собой поведение всей графической
библиотеки дальше.
...
Рейтинг: 0 / 0
Наложение серии изображений
    #39899933
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понял, о чём это. Но если применить к "усам" и их последствиям для формулы, то их можно не рисовать физичекси, но использовать в вычислениях, запоминать в доступном месте ...
Ибо речь идёт только о рекуррентной формуле. Ей всегда нужны начальные значения. Предыдущие результаты наводят на мысль, что с т.зр. "красиво" пустые начальные условия - не самое лучшее. Или поменять смысл "красиво".
...
Рейтинг: 0 / 0
16 сообщений из 166, страница 7 из 7
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Наложение серии изображений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]