Обработка данных дистанционного зондирования

Программа визуализации космических изображений. Файлы формата LAN. В программе реализован инструмент ресинтеза цветного изображения, отображаемого в главном окне, инструмент выравнивания гистограмм яркости каналов и диалоговое окно вывода гистограмм.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 12.05.2012
Размер файла 2,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ,

МОЛОДЕЖИ И СПОРТА УКРАИНЫ

ГОСУДАРСТВЕННОЕ ВЫСШЕЕ УЧЕБНОЕ ЗАВЕДЕНИЕ

«НАЦИОНАЛЬНЫЙ ГОРНЫЙ УНИВЕРСИТЕТ»

Кафедра геоинформационных систем

КУРСОВАЯ РАБОТА

по дисциплине

«Обработка и дешифрирование аэрокосмических изображений»

Выполнили

студенты гр. КМ-08

Бакай А.Р

Чабанюк Р.С

Проверила

Ассистент Сергеева Е.Л

Днепропетровск, 2012

Задание

Разработать и реализовать на языке Object Pascal программу визуализации данных космических изображений, сберегаемых в файлах формата LAN. В программе реализовать инструмент ресинтеза цветного изображения, отображаемого в главном окне, инструмента выравнивания гистограмм яркости каналов, а также диалоговое окно вывода гистограмм.

1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

1.1 Файлы формата LAN

Формат LAN является форматом файла системы ERDAS версии до 8-й. Кроме данных дистанционного зондирования, файлы в таком формате содержат заголовок с дополнительной информацией, которая помогает системам по обработке ДДЗ правильно считывать данные. Величина заголовка составляет 128 байт.

Структура заголовка файла формата LAN (ERDAS 7.4) представлена в таблице 1.1.

Таблица 1.1 Заголовок файла формата LAN (ERDAS 7.4)

Имя поля

Количество байт

Описание

HDWORD

1:6

Массив из 6 байт, который содержит строку "HEAD74" или "HEADER"

IPACK

7:8

Целое значение, которое показывает сколько байт отводится для данных:

0 = 8 бит

1 = 4 бита

2 = 16 бит

NBANDS

9:10

Целое значение, которое указывает на количество полос/каналов

11:16

Не используется

ICOLS

17:20

Целое значение - количество столбцов

IROWS

21:24

Целое значение - количество строк

XSTART

25:28

Целое значение - х - координата первого пикселя в файле (верхний левый угол)

YSTART

29:32

Целое значение - у - координата первого пикселя в файле (верхний левый угол)

33:88

Не используется

MAPTYP

89:90

Целое, указывает тип картографической проекции, связанной с файлом

NCLASS

91:92

Целое, указывает количество классов в наборе данных (для файлов формата GIS)

93:106

Не используется

IAUTYP

107:108

Целое, указывает единицу измерения площади, которая связана с каждым пикселем:

0 = отсутствует

1 = акр

2 = гектар

3 = другие единицы

ACRE

109:112

Действительное значение, указывает площадь в каждом пикселе в единицах, которые значатся в поле IAUTYP

Имя поля

Количество байт

Описание

XMAP

113:116

Действительное значение х-координаты карты пикселя верхнего левого угла в файле

YMAP

117:120

Действительное значение у-координаты карты пикселя верхнего левого угла в файле

XCELL

121:124

Действительное значение длины каждого пикселя по х-направлению в единицах, которые значатся в поле MAPTYP

YCELL

125:128

Действительное значение длины каждого пикселя по у-направлению в единицах, которые значатся в поле MAPTYP

1.2 Гистограмма яркости изображения

Яркость изображения во многих случаях определяется контрастностью, которая представляет разницу между максимальным и минимальным уровнями полутонов в некоторой области изображения, например, в окне (локальная контрастность) или во всей области изображения (глобальная контрастность). Путем усиления контрастности можно улучшить видимость отдельных структур изображения или уменьшить искажение, которые возникли при условиях получения изображения.

Гистограммой яркости изображения (рис 1.1) называется график, который показывает относительную частоту появления точки (пикселя) разных значений яркости в изображении. Шкала яркости включает значения от 0 до 255.

Рис.1.1 Гистограмма яркости изображения

Гистограмма яркости помогает оценить общее качество изображения на основе математической интерпретации тонального диапазона изображения в виде специальной диаграммы.

Другое определение гистограммы яркости следующее. Гистограммой цифрового изображения с уровнями яркости в диапазоне [0, L-1] называется дискретная функция

h(rk) = nk

где rk есть k-тый уровень яркости, а nk - количество пикселей в изображении, что имеют яркость rk.

Обычной практикой есть нормализация гистограммы путем деления каждого значения на общее количество пикселей в изображении, что обозначается n. Таким образом, значение нормализованной гистограммы будет:

p(rk) = nk/n для k=0,1,…,(L-1)

где p(rk) - оценка вероятности попадания пикселя со значением яркости rk. Суммарное значение нормализованной гистограммы равно единице. Для большинства цифровых изображений, которые подлежат обработке в современных системах L=256.

Изображения со слабой контрастностью имеют гистограмму яркости, которая сгруппирована в небольшом диапазоне значений. Гистограмма таких изображений может быть смещена в область темных или светлых тонов, или может размещаться и в центре диапазона яркости. Гистограмма изображения с хорошей контрастностью равномерно занимает весь диапазон яркостей. Такие изображения обычно воспринимаются как более качественные. У высококонтрастных изображений также задействован весь диапазон яркости, но гистограмма может иметь пики, что связано с наличием больших зон темных или светлых тонов.

1.3 Градационная коррекция

Слабый контраст - наиболее распространенный дефект изображения, который обусловлен ограничением диапазона отображения яркостей, что часто сочетается с нелинейностью характеристики передачи уровней (градационной характеристикой). Одним из эффективных путей улучшения яркости изображения является использование метода градационной коррекции, при котором заданный диапазон изменения яркости входного изображения линейно растягивается на всю шкалу уровней полутонов [0-(L-1)], где L=256. В результате этого расширяется диапазон изменения яркости результирующего изображения и этим самым изображение становиться более контрастным. Наиболее расширенным и простым способом градационной коррекции является линейное преобразование:

цветной изображение гистограмма космический

для

для ,

для

где , - минимальное и максимальное значение яркости входного изображения .

2. ПРАКТИЧЕСКАЯ ЧАСТЬ

  • 2.1 Главное окно программы
  • При открытии приложения появляется главное окно программы, имеющее интерфейс, представленный на рис. 2.1.
  • На форме приложения расположены следующие компоненты:
  • · TMainMenu - главное меню программы
  • · TPaintBox -компонент для визуализаии изображения
  • · TOpenDialog - компонент для открытия изображения
  • После запуска при помощи пунктов меню, пользователь может выполнить операции, описанные в таб 2.1:
  • Таблица 2.1
  • Пункт меню

    Операция

    File

    Open

    Открытие изображения

    Close

    Закрытие изображения

    Exit

    Выход из приложения

    Operation

    Resintez

    Вызов инструмента ресинтеза и градационной коррекции

    Histogram

    Построение гистограммы изображения

    Рис. 2.1 Главное окно проекта

    Программа состоит из трех модулей: TViewer, TResintez и THistogram.

    Главным модулем приложения является TViewer, который используется два других модуля. В нем реализованы процедуры загрузки изображения формата LAN, а также вывода исходного или преобразованного компонента на экран.

    В модуле TResintez реализованы инструменты градационной коррекции и ресинтеза. Пользователь устанавливает соответствие между каналами выводимого изображения(красный, зеленый, синий) и каналами космоснимка. Также пользователь может задавать пороговое значение яркости, для улучшения контрастности снимка.

    Модуль THistogram отвечает за вывод гистограмм яркости исходного и преобразованного изображения. Пользователь имеет возможность выбрать канал и задать пороговое значение.

    С помощью UML-диаграмм классов (Приложение Б) представлены методы и поля данных, содержащиеся в классах приложения.

    2.2 Дочерние окна программы

    Окно, появляющееся при выборе пункта меню Option/Resintez, предназначенное для ресинтеза изображения, а также для выполнения градационной коррекции. С помощью инструмента градационной корекции пользователь может изменить пороговое значения яркости изображения от 0 до 50, при этом производиться его коррекция и затем на экран выводиться изображение с новым значением яркости.

    Окно состоит из визуальных компонентов: ТSplinEdit, TLable, TBitBtn, TComboBox, TPanel.

    Рис 2.2 Окно выбор каналов

    Окно, появляющееся при выборе пункта меню Option/Histogram, для построения гистограммы яркости по каналам для входного и скорректированного изображения. В левой части окна-приложения всегда строиться гистограмма яркости исходного изображения, не зависимо от того было ли изменено пороговое значения яркости до этого.

    Окно состоит из визуальных компонентов: ТSplinEdit, TLable, TBitBtn, TComboBox, TPanel, NChar.

    Рис. 2.3 Окно построения гистограмм

    2.3 Внешний вид работающей программы

    Визуализация изображения delt1234 с пороговым значением яркости = 5.

    Рис. 2.4 Работающее приложение

    3. ПОСТРОЕНИЕ ГИСТОГРАММЫ ЯРКОСТИ В СРЕДЕ MATLAB

    Для проверки корректности работы приложения были сравнены результаты построения гистограмм яркости отдельных каналов с гистограммами, построенными в среде MATLAB.

    Для построения гистограмм яркости в MATLAB предусмотрена встроенная функция imhist. Ниже приведен код программы.

    clc

    clear

    a=imread('butovo.bmp');

    a1=imread('butovo_r.bmp');

    fr=a(:,:,1);

    fg=a(:,:,2);

    fb=a(:,:,3);

    max_stat=max(imhist(fr))

    b=imhist(fr)*100/max_stat;

    plot(b);

    В таблице 3.1 представлены изображения гистограмм

    Таблица 3.1

    Viewer

    MATLAB

    Таким образом, видно, что инструмент построения гистограмм работает корректно.

    Выводы

    Результатом выполнения задания является программа визуализации космических изображений, сохраненных в формате LAN. В программе реализованы инструменты ресинтеза цветного изображения, построения гистограмм яркости для исходного изображения и изображения, подвергнутого градационной коррекции. Инструмент градационной коррекции реализован на базе метода кусочно-линейного преобразования яркости.

    Приложение протестировано на трех изображениях типа LAN: Butovo, delt1234, TIPJUL1. Для анализа работы программы в среде MatLab были рассчитаны средние значения яркости исходного изображения и отфильтрованного, а также их дисперсии, а также были построены гистограммы яркости. Исходя из результата, можно сказать, что программа работает корректно.

    Список литературы

    1. Гонсалес Р., Вудс Р., Эддинс С. «Цифровая обработка изображений в среде MatLab»: Москва: Техносфера, 2006 - 616с.

    2. Гонсалес Р., Вудс Р., Эддинс С. «Цифровая обработка изображений»: Москва: Техносфера, 2006 - 1072с.

    3. Гаркуша И.М., Бабенко Г.М., «Обробка та дешифрування аерокосмiчних зображень»: Методичнi рекомендацii Д.: Нацiональний гiрничий унiверситет, 2008 - 72с.

    4. Leica Geosystems, Erdas Imgine, Практическое руководство TourGuides, 2005 - 707с.

    Приложение А

    Код программ

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, Menus, ExtCtrls,Unit2,Unit3, StdCtrls;

    type

    TViewer = class(TForm)

    OD: TOpenDialog;

    PB: TPaintBox;

    Menu: TMainMenu;

    File1: TMenuItem;

    Open1: TMenuItem;

    Close1: TMenuItem;

    Exit1: TMenuItem;

    Operation: TMenuItem;

    Resintez1: TMenuItem;

    Histogram1: TMenuItem;

    TScrollBox1: TScrollBox;

    function OpenDialog:boolean;

    procedure CreateBitmap;

    procedure DestroyData;

    procedure PBPaint(Sender:TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure LoadLan;

    procedure Open1Click(Sender: TObject);

    procedure Close1Click(Sender: TObject);

    procedure Exit1Click(Sender: TObject);

    procedure Resintez1Click(Sender: TObject);

    procedure Histogram1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    bmp:TBitmap;

    end;

    var

    Viewer: TViewer;

    nRows:integer;

    nCols:integer;

    nBands:integer;

    flLoadData:boolean;

    type LAN_HEADER=record

    HDWORD:array[0..5]of Byte;

    IPACK:WORD;

    IBANDS:WORD;

    unused1:array[0..5] of Byte;

    ICOLS:integer;

    IROWS:integer;

    xstart:integer;

    ystart:integer;

    unused2:array[0..55]of byte;

    maptyp:word;

    nclass:word;

    unused3:array[0..13]of byte;

    iautyp:word;

    acre:single;

    xmap:single;

    ymap:single;

    xcell:single;

    ycell:single;

    end;

    implementation

    {$R *.dfm}

    //Открытие изображения *.LAN

    function TViewer.OpenDialog:boolean;

    begin

    OD.Filter:='LAN Files(*.lan)|*.lan';

    result:=OD.Execute;

    end;

    procedure TViewer.CreateBitmap;

    var

    i,j:integer;

    begin

    for i:=0 to nRows-1 do

    for j:=0 to nCols-1 do

    bmp.canvas.Pixels[j,i]:=RGB(histogram.data[i,j,Resintez.b1-1],histogram.data[i,j,Resintez.b2-1],histogram.data[i,j,Resintez.b3-1]);

    end;

    //Удаление изображениея

    procedure TViewer.DestroyData;

    begin

    if flLoadData then

    begin

    flLoadData:=false;

    bmp.Dormant;

    bmp.FreeImage;

    bmp.Free;

    bmp:=nil;

    histogram.data:=nil;

    end;

    if (Resintez.bmp1<>nil) then

    begin

    Resintez.bmp1.Dormant;

    Resintez.bmp1.FreeImage;

    Resintez.bmp1.Free;

    Resintez.bmp1:=nil;

    Resintez.ch1:=false;

    end;

    end;

    //Отрисовка изображения

    procedure TViewer.PBPaint(Sender:TObject);

    begin

    if flLoadData then begin

    if Resintez.ch1=true then

    PB.Canvas.Draw(0,0,Resintez.bmp1)

    else

    PB.Canvas.Draw(0,0,bmp);

    end;

    end;

    procedure TViewer.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    DestroyData;

    end;

    //Считывание структуры заголовка LAN

    procedure TViewer.LoadLan;

    var

    FHeader:file;

    lan:LAN_HEADER;

    buf:Byte;

    i,j,k:integer;

    begin

    try

    AssignFile(FHeader,OD.FileName);

    Reset(FHeader,1);

    BlockRead(FHeader,lan,sizeof(lan));

    SetLength(histogram.data,lan.IROWS, lan.ICOLS, lan.IBANDS);

    PB.width:=lan.ICOLS;

    PB.Height:=lan.IROWS;

    bmp:=TBitmap.Create;

    bmp.width:=lan.ICOLS;

    bmp.Height:=lan.IROWS;

    nRows:=lan.IROWS;

    nCols:=lan.ICOLS;

    nBands:=lan.IBANDS;

    for i:=0 to lan.IROWS-1 do

    for k:=0 to lan.IBANDS-1 do

    for j:=0 to lan.ICOLS-1 do

    begin

    BlockRead(FHeader,buf,1);

    histogram.data[i,j,k]:=buf;

    end;

    flLoadData:=true;

    finally

    CloseFile(FHeader);

    end;

    end;

    procedure TViewer.Open1Click(Sender: TObject);

    var i:integer;

    begin

    if OpenDialog then

    begin

    DestroyData;

    LoadLAN;

    Resintez.Repaint;

    with Resintez do

    begin

    R.ItemIndex:=-1;

    G.ItemIndex:=-1;

    B.ItemIndex:=-1;

    R.Items.Clear;

    G.Items.Clear;

    B.Items.Clear;

    OK.Enabled:=false;

    for i:=0 to nbands-1 do

    begin

    R.Items.Add(inttostr(1+i));

    G.Items.Add(inttostr(1+i));

    B.Items.Add(inttostr(1+i));

    end;

    end;

    Resintez.ShowModal;

    CreateBitmap;

    W:=bmp.Width;

    H:=bmp.Height;

    PB.Repaint;

    Open1.Enabled:=false;

    Close1.Enabled:=true;

    Resintez1.Enabled:=true;

    Histogram1.Enabled:=true;

    end;

    end;

    procedure TViewer.Close1Click(Sender: TObject);

    begin

    DestroyData;

    Open1.Enabled:=true;

    Close1.Enabled:=false;

    Resintez1.Enabled:=false;

    Histogram1.Enabled:=false;

    pb.Repaint;

    Resintez.Porog.Value:=0;

    Resintez.R.ItemIndex:=-1;

    Resintez.g.ItemIndex:=-1;

    Resintez.B.ItemIndex:=-1;

    end;

    procedure TViewer.Exit1Click(Sender: TObject);

    begin

    Viewer.Close;

    end;

    //Открытие инструмента реситнеза изображения

    procedure TViewer.Resintez1Click(Sender: TObject);

    begin

    Resintez.ShowModal;

    CreateBitmap;

    PB.Repaint;

    end;

    //Открытие инструмента построения гистограммы

    procedure TViewer.Histogram1Click(Sender: TObject);

    begin

    Histogram.ShowModal;

    end;

    end.

    unit Unit2;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, Spin, Buttons, Math, ExtCtrls;

    type A=array of array of integer;

    type

    TResintez = class(TForm)

    Panel1: TPanel;

    Porog: TSpinEdit;

    Panel2: TPanel;

    Label1: TLabel;

    LabelR: TLabel;

    R: TComboBox;

    LabelG: TLabel;

    G: TComboBox;

    LabelB: TLabel;

    B: TComboBox;

    OK: TBitBtn;

    Close: TBitBtn;

    procedure OKClick(Sender: TObject);

    procedure RChange(Sender: TObject);

    procedure GChange(Sender: TObject);

    procedure BChange(Sender: TObject);

    procedure BrightHist;

    procedure Grad_cor(mas:A);

    procedure PorogChange(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Panel2MouseMove(Sender: TObject; Shift: TShiftState; X,

    Y: Integer);

    private

    { Private declarations }

    public

    { Public declarations }

    massivR:A;

    massivG:A;

    massivB:A;

    bmp1:TBitmap;

    ch,ch1:boolean;

    b1,b2,b3:integer;

    end;

    var

    Resintez: TResintez;

    implementation

    uses Unit1, Unit3;

    {$R *.dfm}

    procedure TResintez.OKClick(Sender: TObject);

    var

    i,j:integer;

    begin

    //Если изменено пороговое значение яркости,

    //то создается объект bmp1 типа TBitmap, в котором

    //будет храниться преобразованное изображение.

    if (ch1=true) then begin

    bmp1:=TBitmap.Create;

    bmp1.width:=Viewer.bmp.width;

    bmp1.Height:=viewer.bmp.height;

    BrightHist;

    for i:=0 to bmp1.width-1 do

    for j:=0 to bmp1.Height-1 do

    //создание изображения, на основе преобразованных яркостей //каналов bmp1.canvas.Pixels[i,j]:=RGB(massivR[i,j],massivG[i,j],massivB[i,j]);

    end;

    end;

    //Считывание значений выбранных каналов

    procedure TResintez.RChange(Sender: TObject);

    begin

    b1:=Strtoint(Resintez.R.Items.Strings[Resintez.R.ItemIndex]);

    end;

    procedure TResintez.GChange(Sender: TObject);

    begin

    b2:=Strtoint(Resintez.G.Items.Strings[Resintez.G.ItemIndex]);

    end;

    procedure TResintez.BChange(Sender: TObject);

    begin

    b3:=Strtoint(Resintez.B.Items.Strings[Resintez.B.ItemIndex]);

    end;

    //Создание массивов каналов яркостей

    procedure TResintez.BrightHist;

    var

    stat:array[0..255] of double;

    y:array[0..255] of double;

    MAX_STAT,x:extended;

    L,h,w,percent,max,i,j,u1,u2,z:integer;

    begin

    L:=256;

    h:=bmp1.Height;

    w:=bmp1.Width;

    Setlength(massivR,w,h);

    Setlength(massivG,w,h);

    Setlength(massivB,w,h);

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    massivR[i,j]:=histogram.data[j,i,Resintez.b1-1];

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    massivG[i,j]:=histogram.data[j,i,Resintez.b2-1];

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    massivB[i,j]:=histogram.data[j,i,Resintez.b3-1];

    //Вызов процедур градационной коррекции

    grad_cor(massivR);

    grad_cor(massivG);

    grad_cor(massivB);

    end;

    //Процедура градационной корреции

    procedure TResintez.Grad_cor(mas:A);

    var

    stat:array[0..255] of double;

    y:array[0..255] of double;

    MAX_STAT,x:extended;

    L,h,w,percent,max,i,j,u1,u2,z:integer;

    begin

    h:=bmp1.Height;

    w:=bmp1.Width;

    L:=256;

    for i:=0 to 255 do

    stat[i]:=0;

    //Подсчитывание количества элементов

    //одинаковой яркости

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    stat[mas[i,j]]:=stat[mas[i,j]]+1;

    MAX_STAT:=0;

    for i:=0 to 255 do

    if MAX_STAT<stat[i] then MAX_STAT:=stat[i];

    for i:=0 to 255 do

    y[i]:=((stat[i]*100)/MAX_STAT);

    //Нахождение минимального и максимального элементов яркости

    percent:=Porog.Value;

    max:=100;

    i:=0;

    while i<256 do begin

    if (y[i]=100) then z:=i;

    i:=i+1;

    end;

    x:=max*percent/100;

    u1:=0;

    u2:=0;

    i:=0;

    repeat

    if(y[i]>=x) then begin u1:=i; break; end;

    i:=i+1;

    until i>(z-1);

    i:=z;

    repeat

    if(y[i]>=x) then u2:=i;

    i:=i+1;

    until i>255;

    //Кусочно-линейное преобразование

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    begin

    if mas[i,j]<u1

    then mas[i,j]:=0

    else if (mas[i,j]>=u1) and (mas[i,j]<=u2)

    then mas[i,j]:=trunc(((mas[i,j]-u1)/(u2-u1))*(L-1))

    else if mas[i,j]>u2

    then mas[i,j]:=L-1;

    end;

    end;

    procedure TResintez.PorogChange(Sender: TObject);

    begin

    ch1:=true;

    end;

    procedure TResintez.FormCreate(Sender: TObject);

    begin

    ch1:=false;

    end;

    procedure TResintez.Panel2MouseMove(Sender: TObject;

    Shift: TShiftState; X, Y: Integer);

    begin

    ch:=false;

    if (R.ItemIndex>-1) and (G.ItemIndex>-1) and (B.ItemIndex>-1)

    then

    OK.Enabled:=true;

    end;

    end.

    unit Unit3;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Unit2, Buttons,

    Spin, Series, Math;

    type

    THistogram = class(TForm)

    Panel1: TPanel;

    Bands: TLabel;

    BandNum: TComboBox;

    Chart1: TChart;

    Chart2: TChart;

    Porog: TSpinEdit;

    Correction: TBitBtn;

    procedure BandNumChange(Sender: TObject);

    procedure BandHist;

    procedure CorrectionClick(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    private

    { Private declarations }

    public

    data:array of array of array of byte;

    { Public declarations }

    end;

    var

    Histogram: THistogram;

    MAX_STAT:extended;

    massiv:array of array of integer;

    w,h:integer;

    y:array [0..255] of double;

    implementation

    uses Unit1;

    {$R *.dfm}

    //Изменение канала

    procedure THistogram.BandNumChange(Sender: TObject);

    begin

    chart2.SeriesList.Clear;

    chart2.Repaint;

    Porog.Value:=0;

    chart1.SeriesList.Clear;

    BandHist;

    Chart1.Repaint;

    Correction.Enabled:=true;

    end;

    //Построение гистограммы исходного изображения

    procedure THistogram.Bandhist;

    var

    i,j:integer;

    gr:TLineSeries;

    stat:array[0..255] of double;

    begin

    gr:=TLineSeries.Create(nil);

    h:=viewer.PB.Height;

    w:=Viewer.PB.Width;

    Setlength(massiv,w,h);

    for i:=0 to h-1 do

    for j:=0 to w-1 do begin

    case BandNum.ItemIndex of

    0: massiv[j,i]:= data[i,j,Resintez.b1-1];

    1: massiv[j,i]:= data[i,j,Resintez.b2-1];

    2: massiv[j,i]:= data[i,j,Resintez.b3-1];

    end;

    end;

    for i:=0 to 255 do

    stat[i]:=0;

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    stat[massiv[i,j]]:=stat[massiv[i,j]]+1;

    MAX_STAT:=0;

    for i:=0 to 255 do

    if MAX_STAT<stat[i] then MAX_STAT:=stat[i];

    for i:=0 to 255 do

    y[i]:=((stat[i]*100)/MAX_STAT);

    i:=0;

    while i<=255 do

    begin

    gr.AddXY(i,y[i]);

    i:=i+1;

    end;

    gr.Marks.Visible:=false;

    Chart1.AddSeries(gr);

    end;

    //Построение гистограммы преобразованного изображения

    procedure THistogram.CorrectionClick(Sender: TObject);

    var

    sgr:TLineSeries;

    stat:array[0..255] of double;

    x,max:double;

    i,ii,j,z,ind,percent,u1,u2:integer;

    L:integer;

    mas_corrected:array of array of integer;

    y1:array [0..255] of double;

    begin

    mas_corrected:=nil;

    SetLength(mas_corrected,Viewer.PB.Width,Viewer.PB.Height);

    Chart2.SeriesList.Clear;

    Chart2.Repaint;

    L:=256;

    sgr:=TLineSeries.Create(nil);

    percent:=Porog.Value;

    max:=100;

    ii:=0;

    while ii<256 do begin

    if (y[ii]=100) then z:=ii;

    ii:=ii+1;

    end;

    x:=max*percent/100;

    u1:=0;

    u2:=0;

    ii:=0;

    repeat

    if(y[ii]>=x) then begin u1:=ii; break; end;

    ii:=ii+1;

    until ii>(z-1);

    ii:=z;

    repeat

    if(y[ii]>=x) then begin u2:=ii; end;

    ii:=ii+1;

    until ii>255;

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    begin

    if massiv[i,j]<u1

    then mas_corrected[i,j]:=0

    else if (massiv[i,j]>=u1) and (massiv[i,j]<=u2)

    then mas_corrected[i,j]:=trunc(((massiv[i,j]-u1)/(u2-u1))*(L-1))

    else if massiv[i,j]>u2

    then mas_corrected[i,j]:=L-1;

    end;

    for i:=0 to 255 do

    stat[i]:=0;

    for i:=0 to w-1 do

    for j:=0 to h-1 do

    stat[mas_corrected[i,j]]:=stat[mas_corrected[i,j]]+1;

    MAX_STAT:=0;

    for i:=0 to 255 do

    if MAX_STAT<stat[i] then MAX_STAT:=stat[i];

    for i:=0 to 255 do

    y1[i]:=((stat[i]*100)/MAX_STAT);

    i:=0;

    while i<=255 do

    begin

    sgr.AddXY(i,y1[i]);

    i:=i+1;

    end;

    sgr.Marks.Visible:=false;

    Chart2.AddSeries(sgr);

    end;

    procedure THistogram.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    Chart2.SeriesList.Clear;

    Chart2.Repaint;

    Chart1.SeriesList.Clear;

    Chart1.Repaint;

    BandNum.ItemIndex:=-1;

    Porog.Value:=0;

    end;

    end.

    Размещено на Allbest.ru


Подобные документы

  • Яркость точек и гистограммы изображения. Изменение яркости и контрастности. Метод ранговой фильтрации с оценкой середины диапазона. Наложение шумов на изображение. Преобразование изображения в негатив. Получение матрицы яркостей и построение гистограмм.

    курсовая работа [1,5 M], добавлен 11.12.2012

  • Общий алгоритм сравнения двух изображений. Метод максимальных площадей. Метод гистограмм. Подготовка изображения к распознаванию. Моделирование многомерной функции. Распределение векторов. Деформируемые модели. Реализация программного обеспечения.

    дипломная работа [384,2 K], добавлен 29.09.2008

  • Создание и редактирование электронных баз данных. Обработка электронных таблиц. Операции изменения формата документа. Основные функции текстовых процессоров. Деловая графика. Построение рисунков, диаграмм, гистограмм различных типов в программе Excel.

    презентация [773,1 K], добавлен 23.12.2013

  • Введение в Microsoft Visual Studio. Диалоговое окно "Восстановленные файлы" интегрированной среды разработки. Веб-обозреватель интегрированной среды разработки. Диалоговое окно "Проверка подлинности прокси-сервера". Сохранение и восстановление файлов.

    реферат [22,0 K], добавлен 29.05.2013

  • Особенности работы программы ENVI, которая является наиболее совершенным программным обеспечением для работы с данными дистанционного зондирования. Спектральный анализ. Поддерживаемые форматы данных. Традиционный анализ изображений. Анализ местности.

    отчет по практике [4,5 M], добавлен 28.08.2014

  • Высокопроизводительные вычисления в обработке данных дистанционного зондирования Земли. Классификация аэрокосмических изображений. Способы удаленного доступа к суперкомпьютеру. Сжатие без потерь и с потерями. Программное обеспечение системы сжатия.

    дипломная работа [2,6 M], добавлен 28.09.2011

  • Типы изображений (черно-белые, полутоновые, цветные) и их форматы. Устройства, создающие цифровые изображения, и их параметры. Применение и характеристики методов сжатия изображений. Поиск по содержимому в базах данных изображений. Структуры баз данных.

    презентация [360,4 K], добавлен 11.10.2013

  • Работа с бинарными изображениями, методы их преобразования в полутоновые. Сущность бинаризации изображений и роль правильного выбора порога квантования. Применение полноцветных, полутоновых и бинарных изображений, способы построения гистограмм.

    лабораторная работа [1,3 M], добавлен 30.09.2009

  • Методы обработки растровых изображений (кластеризация, пороговая и интерактивная сегментация). Разработка программного модуля для системы мониторинга биосферы и дистанционного зондирования. Создание пользовательского интерфейса программного модуля.

    курсовая работа [2,2 M], добавлен 29.04.2015

  • Информация о графических форматах. Хранение изображения в программе. Очередь как вспомогательная структура данных. Загрузка изображения из двоичного файла. Операции с изображением. Уменьшение разрешающей способности. Увеличение размера изображения.

    курсовая работа [1,1 M], добавлен 29.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.