|
| ||
| : О проекте :: Устройство робота :: Фото и видео :: Демострационный софт :: О авторе : | ||
Фильтрация изображенияФильтрация производится окном, размером 3x3 пикселя. Фильтр находит среднее значение всех 9 точек, и результат записывается в центральную точку окна. Окно пробегается по всему изображению. Затем процесс фильтрации повторяется ровно столько раз, каков порядок данного фильтра. Рекомендуется использовать фильтр 3-4-его порядка. Процесс фильтрации можно ускорить примерно в два раза, если находить среднее значение не 9, а 8 точек окна, исключив одну из угловых точек. В этом случае деление суммы яркостей нужно будет производить не на 9, а на 8, что можно заменить операцией правого сдвига на 3, которая на процессорах intel80x86 выполняется в ~8 раз быстрее.
...
interface
const
ImageWidth = 384; // ширина изображения. Если умножить на 3 должно быть кратным 4
ImageHeight = 284; // высота изображения
type
// тип данных для черно-белого изображения
TBWImage = array[0..ImageHeight-1,0..ImageWidth-1] of Byte;
...
type
TForm1 = class(TForm)
Panel1 : TPanel;
PaintBox1 : TPaintBox;
Timer1 : TTimer;
...
public
BWImage : TBWImage;
end;
...
implementation
...
{ процедура фильтрует указанное изображение }
procedure FilterBWImage(var Image : TBWImage); assembler;
asm
PUSH EDI
MOV EDI,EAX
ADD EDI,1+ImageWidth
MOV ECX,ImageHeight-2
@@1: PUSH ECX
PUSH EDI
MOV ECX,ImageWidth-2
@@2: XOR EAX,EAX
MOV AL,[EDI-ImageWidth-1]
ADD AL,[EDI-ImageWidth]
ADC AH,0
ADD AL,[EDI-ImageWidth+1]
ADC AH,0
ADD AL,[EDI-1]
ADC AH,0
ADD AL,[EDI]
ADC AH,0
ADD AL,[EDI+1]
ADC AH,0
ADD AL,[EDI+ImageWidth-1]
ADC AH,0
ADD AL,[EDI+ImageWidth]
ADC AH,0
SHR EAX,3
STOSB
LOOP @@2
POP EDI
POP ECX
ADD EDI,ImageWidth
LOOP @@1
POP EDI
end;
procedure TForm1.Timer1Timer(Sender:TObject);
begin
{ Получить черно-белое изображение в BWImage }
// Фильтрация изображения 3 раза
FilterBWImage(BWImage);
FilterBWImage(BWImage);
FilterBWImage(BWImage);
// Вывести результирующее изображение на PaintBox1. см. Захват видео.
DrawBWImage( PaintBox1.Canvas.Handle, BWImage );
...
end;
end.
| ||
| Дизайн: DynSoft |