0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 7
1

Обработка изображения через матрицу путем аффинных преобразований

10.04.2017, 15:32. Показов 1796. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, хотел бы попросить помощи в понимании задания и его выполнением.
Условие:
Кликните здесь для просмотра всего текста
Разбить исходное изображение на блоки размером 5х5. К каждому отсчету блока прибавить число с соответствующими координатами из матрицы:

40 60 150 90 10
80 170 240 200 110
140 210 250 220 130
120 190 230 180 70
20 10 160 50 30


Результирующее изображение перевести в двуцветное (черно-белое). Исходное изображение цветное (8 бит).


Что можно почитать на эту тему? Где найти информацию? Это все нужно сделать через PascalABC.NET, а я не знаю с чего начать. Заранее спасибо за ответы!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2017, 15:32
Ответы с готовыми решениями:

Реализация двумерных аффинных преобразований
Построить двумерное изображение заданной фигуры. Над фигурой выполнить все аффинные преобразования:...

Путем элементарных преобразований привести матрицу к треугольному виду
Здравствуйте,форумчане! у меня чисто организационный вопрос. чудится или нет,что условие задачки...

Путем линейных преобразований строк привести исходную матрицу к треугольному виду.
В текстовом файле dat.pas задана действительная квадратная матрица 10-го порядка. Путем линейных...

СДНФ путем преобразований
! - отрицание & - коньюнкция v - дизъюнкция -> - импликация <-> -эквиваленция Что дальше...

12
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
11.04.2017, 08:20 2
Цитата Сообщение от elzzzy Посмотреть сообщение
Разбить исходное изображение на блоки размером 5х5. К каждому отсчету блока прибавить число с соответствующими координатами из матрицы:
40 60 150 90 10
80 170 240 200 110
140 210 250 220 130
120 190 230 180 70
20 10 160 50 30
если до меня правильно "дошло", то так:

Pascal
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
uses GraphAbc;
var
  a:array[0..4,0..4] of integer:=((40,60,150, 90, 10),
                                (80, 170, 240, 200, 110),
                                (140, 210, 250, 220, 130),
                                (120, 190, 230, 180, 70),
                                (20, 10, 160, 50, 30));
begin
  randomize;
  SetWindowSize(320,240);
  for i:integer:=1 to WindowHeight do begin
  // типа 8 бит (хотя для 8 бит цветов 256)
    case random(8) of
      0:SetPenColor(clBlack);
      1:SetPenColor(clBlue);
      2:SetPenColor(clRed);
      3:SetPenColor(clMagenta);
      4:SetPenColor(clGreen);
      5:SetPenColor(clCyan);
      6:SetPenColor(clYellow);
      7:SetPenColor(clWhite);
    end;  
    line(1,i,WindowWidth,i);
  end;
  SetPenWidth(4);
  SetPenColor(clWhite);
  line(WindowWidth div 2,1,WindowWidth div 2,Window.Height);
  for i:integer:=1 to WindowWidth div 2 do 
    for j:integer:=1 to WindowHeight do begin
      var c:=GetPixel(i,j);
      var t:=a[i mod 5,j mod 5];
      SetPixel(i,j,RGB(c.R+t,c.G+t,c.B+t));
    end;  
end.
0
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 7
11.04.2017, 17:08  [ТС] 3
Мне не нужно использовать GraphABC. По сути то понятно, что надо взять изображение 8 бит цветное какое-то с файла. Каждое изображение это матрица. Нужно разбить большую матрицу на маленьких много 5х5 и прибавить к каждой эту матрицу с условия. Потом перевести в черно-белое. Далее сохранить на компьютере.
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
12.04.2017, 06:10 4
В строках с 28 по 33 идет работа с матрицей пикселей. Сложение каждого составляющего цвета с коэффициентом матрицы. Методичку приложите и полное задание.


или речь идет про System.Drawing.Imaging ColorMatrix (https://msdn.microsoft.com/en-... 10).aspx)?
0
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 7
12.04.2017, 16:39  [ТС] 5
Задания на 5* номер 8. Методички нету. Могу скинуть все презентации лекций, которых мы проходили.
Вложения
Тип файла: rar Задания.rar (32.9 Кб, 8 просмотров)
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
13.04.2017, 19:06 6
Цитата Сообщение от elzzzy Посмотреть сообщение
Могу скинуть все презентации лекций, которых мы проходили.
скидывай, хотя я сильно сомневаюсь, что там будет изложено задание на "автомат"

Добавлено через 1 минуту
Цитата Сообщение от elzzzy Посмотреть сообщение
Мне не нужно использовать GraphABC
- с чего это?
0
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 7
13.04.2017, 21:32  [ТС] 7
Joy, про GraphABC ничего не написано у меня, в отличии от других. Задание не на автомат, на 5 с плюшками. Они могут как ничего не дать, так и освободить от экзамена, но он из двух частей. Освобождается только от первой. Я просто хочу понять как вообще работать с этим. Я так понял, что изображение из файла (8 бит), а результирующее черно-белое. Прибавить матрицу до того, как в ч-б перевели. Юзать без графа. Как вообще разбить изображение на 5х5 матрицу. Я помню, что мы проходили, что первые биты занимают что-то, другие под цвет RGB, а потом сама матрица. Может почитать где можно как это в паскале реализовать? Или тут прям капитально думать нужно?
Вложения
Тип файла: rar lec.rar (2.24 Мб, 5 просмотров)
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
14.04.2017, 05:18 8
Цитата Сообщение от elzzzy Посмотреть сообщение
Что можно почитать на эту тему
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
14.04.2017, 05:25 9
это почитать
Вложения
Тип файла: pdf Лекции по обработке изображений Ч 2 - Стр 2.pdf (923.7 Кб, 10 просмотров)
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
14.04.2017, 06:32 10
как-то так
Pascal
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
uses GraphAbc;
var
  a:array[0..4,0..4] of integer:=((40,60,150, 90, 10),
                                (80, 170, 240, 200, 110),
                                (140, 210, 250, 220, 130),
                                (120, 190, 230, 180, 70),
                                (20, 100, 160, 50, 30));
 p:picture;                                
begin
  p:=picture.Create('teddy.bmp'); //тут имя входного рисунка
  SetWindowSize(p.Width*2,p.Height*2);
  p.Draw(0,0);
  for i:integer:=0 to p.Width-1 do 
    for j:integer:=0 to p.Height-1 do begin
      var c:=p.GetPixel(i,j);
      var t:=a[i mod 5,j mod 5];
      p.SetPixel(i,j,ARGB(c.A+t,c.R,c.G,c.B));
    end;  
  p.Draw(p.Width,0); 
  p.bmp.Save('temp.bmp');// результат после наложения матрицы (хотя я не уверен в правильности примения)
  for i:integer:=0 to p.Width-1 do 
    for j:integer:=0 to p.Height-1 do begin
      var c:=p.GetPixel(i,j);
      if (c.B+c.G+c.R)/3>128 then p.SetPixel(i,j,RGB(255,255,255)) else p.SetPixel(i,j,RGB(0,0,0))
    end;  
  p.Draw(0,p.Height); 
  p.bmp.Save('result.bmp');//итоговое черно-белдое изображение
end.
Добавлено через 33 секунды
PS: вы, кстати матрицу не верно списали
0
0 / 0 / 0
Регистрация: 10.04.2017
Сообщений: 7
14.04.2017, 14:12  [ТС] 11
Joy, Мне рассказали про задание. Сказали, что 5* останется при том случае, если я буду использовать в качестве ввода и вывода нетипизированный файл. Плюс к этому еще GraphABC не буду использовать. Т.е. ввод и вывод картинки не через функции ввода/вывода паскаля, а с применением нетипизированного файла и без GraphABC. Если с ними то на 5, если без них, то на 5*
Объяснили, что сначала мы берем код с нетипизированного файла картинки, далее мы разбиваем большое изображение на блоки 5х5. Складываем матрицу с каждым блоком. Исходное изображение переводим в Ч-Б и выводим в файл (вот только не понял в bmp или опять нетипизированный).
P.S. Извините за матрицу, видимо быстро писал.

Добавлено через 10 минут
А и еще переход из цветного с ч-б происходит с цветного в серый, а потом уже черно-белый, как мне пояснили.

Добавлено через 1 час 0 минут
Тут получается в последнем коде мы разбиваем не изображение на 5х5 матрицы, а саму матрицу 5х5 делаем 1х1 и прибавляем к каждому пикселю последовательно?

Добавлено через 3 минуты
Может у вас есть скайп или вк? Я просто не особо любитель форумов. По мне скайп или вк быстрее и проще для согласовки моментов. Или вы только на форуме отвечаете?
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
15.04.2017, 03:45 12
Цитата Сообщение от elzzzy Посмотреть сообщение
(вот только не понял в bmp или опять нетипизированный)

Не по теме:

а знаний то нету совсем и желания учиться, давно бы интернет перетряхнул и прочитал как читать/писать bmp не используя встроенных средств языка


Цитата Сообщение от elzzzy Посмотреть сообщение
Тут получается в последнем коде мы разбиваем не изображение на 5х5 матрицы, а саму матрицу 5х5 делаем 1х1 и прибавляем к каждому пикселю последовательно?
нет, как в условии написано так и делаем. можешь проверить на бумаге.
Цитата Сообщение от elzzzy Посмотреть сообщение
Или вы только на форуме отвечаете?
только на форуме, т.к. тут если что направят на пусть истинный, предложат вариант интересней, и другим пользователем переписка может помочь.
Цитата Сообщение от elzzzy Посмотреть сообщение
А и еще переход из цветного с ч-б происходит с цветного в серый, а потом уже черно-белый, как мне пояснили.
Pascal
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
uses GraphAbc;
var
  a:array[0..4,0..4] of integer:=((40,60,150, 90, 10),
                                (80, 170, 240, 200, 110),
                                (140, 210, 250, 220, 130),
                                (120, 190, 230, 180, 70),
                                (20, 100, 160, 50, 30));
 p:picture;                                
begin
  p:=picture.Create('portret.bmp'); //тут имя входного рисунка
  SetWindowSize(p.Width*2,p.Height*2);
  p.Draw(0,0);
  for i:integer:=0 to p.Width-1 do 
    for j:integer:=0 to p.Height-1 do begin
      var c:=p.GetPixel(i,j);
      var t:=a[i mod 5,j mod 5];//получаем число из матрицы
      var gr:=Round(0.3*c.R+0.59*c.G+0.11*c.B);//перевели в серый цвет
      gr:=min(255,gr+t);//добавляем число из матрицы (сразу затупил, что надо максимальное значение брать, а не модуль)
      p.SetPixel(i,j,RGB(gr,gr,gr)); //изменяем пиксель
    end;  
  p.Draw(p.Width,0); 
  p.bmp.Save('temp.bmp');// результат после наложения матрицы 
//собственно перевод в чб цвет
  for i:integer:=0 to p.Width-1 do 
    for j:integer:=0 to p.Height-1 do begin
      var c:=p.GetPixel(i,j);
      if (c.B+c.G+c.R)/3>128 then p.SetPixel(i,j,RGB(255,255,255)) else p.SetPixel(i,j,RGB(0,0,0))
    end;  
  p.Draw(0,p.Height); 
  p.bmp.Save('result.bmp');//итоговое черно-белое изображение
end.
1
19 / 66 / 18
Регистрация: 12.04.2017
Сообщений: 258
15.04.2017, 12:05 13
Цитата Сообщение от elzzzy Посмотреть сообщение
Плюс к этому еще GraphABC не буду использовать.
Похоже, ТС хочет, чтобы в программе не было объявления uses GraphABC...
0
15.04.2017, 12:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2017, 12:05
Помогаю со студенческими работами здесь

СКНФ путём равносильных преобразований
СДНФ у меня получилось найти довольно просто, а как СКНФ находить, понять не могу.

СДНФ путём эквивалентных преобразований
Доброго времени суток, препод дал такую задачу: построить СДНФ выражения abc путём эквивалентных...

Проверьте тождество путем преобразований
помогите проверить тождество A\(B\C)=(A\B)∪(B∩C)

СКНФ и СДНФ путем тождественных преобразований
Дано задание: "Найти СКНФ И СДНФ 2-мя разными способами: x^(x->y)" С помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru