Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2016, 18:53   #1
Михаил22042016
Пользователь
 
Регистрация: 21.04.2016
Сообщений: 54
По умолчанию Матричные фильтры обработки изображений

в общем в результате должна увеличиться резкость, убраться мыло, местами даже контур появиться.
а получается в место контуров..., трудно описать, картинку покажу...
помогите пожалуйста разобраться почему результате цветная абра-кадабра
можно подключить как модуль
Код:
unit fMatrix;
interface
uses Winapi.Windows, System.Classes,System.SysUtils, Vcl.Graphics;
function Matrix(iBM:TBitmap):TBitmap;
implementation
function Matrix(iBM:TBitmap):TBitmap;
type
  PixelRGB = packed record b,g,r: byte; end;
  tXarray = array[-2..2] of PixelRGB;
  Xarray = ^tXarray;
  YXarray = array of Xarray;
const
  Z : Integer = 8;
  Mtr: array [0..8] of Integer = (-1,-1,-1,
                                  -1,16,-1,
                                  -1,-1,-1);
var
  BufBM:TBitmap;
  x, y: Integer;
  siBM,sBufBM: YXarray;  // сканы
begin
try
  try
    BufBM:= TBitmap.Create;
    BufBM.Width:=iBM.Width;
    BufBM.Height:=iBM.Height;
  ////////////////// копирование ////////////////////
    BufBM.Canvas.CopyRect(rect(Point(0,0),Point(iBM.Width,iBM.Height)),// размер копируемой области
    iBM.Canvas,                                         // Bitmap.Canvas откуда копировать (именно Bitmap.Canvas)
    rect(Point(0,0),Point(iBM.Width,iBM.Height))); // координаты копируемого прямоугольника в источнике
  ///////////////////////////////////////////////////
    BufBM.PixelFormat:= pf24bit;
    iBM.PixelFormat  := pf24bit;
    SetLength(siBM,iBM.Height);
    SetLength(sBufBM ,BufBM.Height);
    for y := 0 to BufBM.Height-1 do
    begin
      siBM[y]  := iBM  .ScanLine[y];
      sBufBM[y]:= BufBM.ScanLine[y];
    end;
    for y := 1 to (iBM.Height-2) do
    begin
      for x := 1 to (iBM.Width-2) do
      begin
        siBM[y][x].r:=  ((sBufBM[y-1][x-1].r*mtr[0])+(sBufBM[y-1][x].r*mtr[1])+(sBufBM[y-1][x+1].r*mtr[2])
                       + (sBufBM[y  ][x-1].r*mtr[3])+(sBufBM[y  ][x].r*mtr[4])+(sBufBM[y  ][x+1].r*mtr[5])
                       + (sBufBM[y+1][x-1].r*mtr[6])+(sBufBM[y+1][x].r*mtr[7])+(sBufBM[y+1][x+1].r*mtr[8]))div Z;
        siBM[y][x].g:=  ((sBufBM[y-1][x-1].g*mtr[0])+(sBufBM[y-1][x].g*mtr[1])+(sBufBM[y-1][x+1].g*mtr[2])
                       + (sBufBM[y  ][x-1].g*mtr[3])+(sBufBM[y  ][x].g*mtr[4])+(sBufBM[y  ][x+1].g*mtr[5])
                       + (sBufBM[y+1][x-1].g*mtr[6])+(sBufBM[y+1][x].g*mtr[7])+(sBufBM[y+1][x+1].g*mtr[8]))div Z;
        siBM[y][x].b:=  ((sBufBM[y-1][x-1].b*mtr[0])+(sBufBM[y-1][x].b*mtr[1])+(sBufBM[y-1][x+1].b*mtr[2])
                       + (sBufBM[y  ][x-1].b*mtr[3])+(sBufBM[y  ][x].b*mtr[4])+(sBufBM[y  ][x+1].b*mtr[5])
                       + (sBufBM[y+1][x-1].b*mtr[6])+(sBufBM[y+1][x].b*mtr[7])+(sBufBM[y+1][x+1].b*mtr[8]))div Z;
      end;
    end;
  finally
    FreeAndNil(BufBM);
    Result:=iBM;
  end;
except
  FreeAndNil(BufBM);
  FreeAndNil(Result);
  Exit;
end;
end;
end.

// использовать так параметр Bitmap с изображением
// img1.Picture.Bitmap:=Matrix(BM);
Изображения
Тип файла: jpg мой результат.jpg (70.5 Кб, 124 просмотров)
Тип файла: jpg правильный результат.jpg (81.8 Кб, 125 просмотров)
Тип файла: jpg оригинал.jpg (59.2 Кб, 129 просмотров)

Последний раз редактировалось Михаил22042016; 06.12.2016 в 18:56.
Михаил22042016 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матричные фильтры обработки изображений 803 Помощь студентам 1 17.05.2013 01:30
Библиотека для обработки изображений (.NET / C++) sawer5 Общие вопросы .NET 1 28.12.2011 10:43
Алгоритмы обработки изображений xripunov Помощь студентам 4 24.08.2011 18:39
Разработать программу для обработки растровых изображений, хранящихся в файлах формата BMP (BitMaP). yeskin Фриланс 5 19.12.2010 15:06
Автоматизация обработки изображений и их оцифровки методами делфи helpme32 Мультимедиа в Delphi 1 14.12.2007 13:03