Обработка данных дистанционного зондирования
Программа визуализации космических изображений. Файлы формата 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