Система автоматизированного анализа пространственной структуры изображений. Подсистема линейной сегментации
Компьютерная графика и обработка изображений электронно-вычислительными машинами являются наиболее важным аспектом использования ЭВМ во всех сферах человеческой деятельности. Разработка "подсистемы линейной сегментации", описание алгоритма и логики.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 23.06.2008 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
void __fastcall TfrmLineSeg::actOpenArrayExecute(TObject *Sender)
{
int i,j;
AnsiString s;
OpenDialog1->Title="Открыть массив точек";
OpenDialog1->Filter="Файлы массивов точек (*.dat)|*.dat|Все файлы (*.*)|*.*";
if(OpenDialog1->Execute())
{
sb1->SimplePanel=true; sb1->SimpleText="Открытие массива точек ...";
mArray->Lines->LoadFromFile(OpenDialog1->FileName);
try
{
w=StrToInt(mArray->Lines->Strings[0]);
h=StrToInt(mArray->Lines->Strings[1]);
if(w>0 & h>0)
{
Image1->Picture->Bitmap->Width=w;
Image1->Picture->Bitmap->Height=h;
Image1->Width=w;
Image1->Height=h;
Image1->Canvas->FillRect(Image1->ClientRect);
scb1->Enabled=true;
ZoomTo(zoom);
for(j=0;j<h;j++)
{
s=mArray->Lines->Strings[j+2];
for(i=0;i<w;i++)
{
apix[i][j][1]=apix[i][j][2]=apix[i][j][3]=-1;
if(s[i+1]=='1') // есть точка
{
apix[i][j][0]=1;
Image1->Canvas->Pixels[i][j]=c0;
}
else // нет точки
{
apix[i][j][0]=0;
Image1->Canvas->Pixels[i][j]=c1;
}
}
}
}
else
throw Exception("");
}
catch (...)
{
MessageBox(Handle,"Ошибка открытия массива", "ОШИБКА", MB_OK);
}
sb1->SimpleText=""; sb1->SimplePanel=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmLineSeg::actSaveArrayExecute(TObject *Sender)
{
int i,j;
AnsiString s;
SaveDialog1->Filter="Файлы массивов точек (*.dat)|*.dat|Все файлы (*.*)|*.*";
SaveDialog1->DefaultExt="*.dat";
SaveDialog1->Title="Сохранить массив точек";
if(SaveDialog1->Execute())
{
sb1->SimplePanel=true; sb1->SimpleText="Запись массива точек ...";
mArray->Clear();
mArray->Lines->Add(IntToStr(w));
mArray->Lines->Add(IntToStr(h));
for(j=0;j<h;j++)
{
s="";
for(i=0;i<w;i++)
{
s+=apix[i][j][0]==1 ? '1' : '0';
}
mArray->Lines->Add(s);
}
mArray->Lines->SaveToFile(SaveDialog1->FileName);
sb1->SimpleText=""; sb1->SimplePanel=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmLineSeg::actOptionsExecute(TObject *Sender)
{
frmOptions->Label1->Font->Color=c5;
frmOptions->Label2->Font->Color=c2;
frmOptions->Label3->Font->Color=c3;
frmOptions->Label4->Font=MemoLog->Font;
frmOptions->Label5->Font=MemoOut->Font;
frmOptions->cbLogs->Checked=logs;
if(frmOptions->ShowModal()==mrOk)
{
try
{
c5=frmOptions->Label1->Font->Color;
c2=frmOptions->Label2->Font->Color;
c3=frmOptions->Label3->Font->Color;
MemoLog->Font=frmOptions->Label4->Font;
MemoOut->Font=frmOptions->Label5->Font;
logs=frmOptions->cbLogs->Checked;
}
catch (...)
{
MessageBox(Handle,"Неверно указано число", "Ошибка", MB_OK);
}
DrawGrid();
ShowInfo(-1,-1);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmLineSeg::actSaveCodeExecute(TObject *Sender)
{
SaveDialog1->Filter="Файлы кодов линий (*.lsc)|*.lsc|Все файлы (*.*)|*.*";
SaveDialog1->DefaultExt="*.lsc";
SaveDialog1->Title="Сохранить коды линий";
if(SaveDialog1->Execute())
{
MemoOut->Lines->SaveToFile(SaveDialog1->FileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmLineSeg::GetLineVect2(int x,int y,int n)
{
TPoint p;
if(apix[x][y][1]==n && apix[x][y][3]==-1) // принадлежит этой линии и не обработана в код
{
// обработка текущей точки
if (NeigCount(x,y)==1) // если конец линии
{ // обработка конца линии
if(nodescnt==0) // если не было найдено конечных точек
{
nodescnt+=1;
xs1=x; ys1=1; // первая координата
}
else if(nodescnt==1) // если уже имеется одна конечная точка
{
}
apix[x][y][3]=1;
xs1=x;
ys1=y;
nodescnt+=1;
}
else if(apix[x][y][2]>0) // если начинается узел
{
}
else // продолжение линии, продолжаем обработку
{
GetLineVect(x-1,y-1,n); GetLineVect(x,y-1,n); GetLineVect(x+1,y-1,n);
GetLineVect(x-1,y ,n); GetLineVect(x+1,y ,n);
GetLineVect(x-1,y+1,n); GetLineVect(x,y+1,n); GetLineVect(x+1,y+1,n);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmLineSeg::actSegCodeOutExecute(TObject *Sender)
{
int i,j,lineno,lnum;
sb1->SimplePanel=true; sb1->SimpleText="Вывод кода сегментов ...";
for(j=0;j<h;j++) // инициализация массива временных атрибутов
for(i=0;i<w;i++)
apix[i][j][3]=-1;
MemoOut->Clear();
lnum=0;
for(j=0;j<h;j++)
for(i=0;i<w;i++)
{
if( apix[i][j][1]>0 // есть сегмент
&& apix[i][j][3]==-1 // и он не обработан
&& (NeigCount(i,j)==1 // точка является началом сегмента
|| NeigCount(i,j)==2) // или продолжением сегмента
)
{ // формируем код для этой линии
xs1=ys1=xs2=ys2=xs3=ys3=-1;
nodescnt=0;
lineno=apix[i][j][1];
lnum+=1;
linecode="";
GetLineVect2(i,j,lineno);
MemoOut->Lines->Add(IntToStr(lnum)+":"+linecode);
wlog(IntToStr(lnum)+"(line #"+IntToStr(lineno)+"):"+linecode);
}
}
sb1->SimpleText=""; sb1->SimplePanel=false;
}
//---------------------------------------------------------------------------
П.3.3. Текст модуля lsimgsize.h
//---------------------------------------------------------------------------
#ifndef lsImgSizeH
#define lsImgSizeH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TfrmImgSize : public TForm
{
__published: // IDE-managed Components
TButton *btnOK;
TButton *btnCancel;
TEdit *edtWidth;
TEdit *edtHeight;
TLabel *Label1;
TLabel *Label2;
void __fastcall btnCancelClick(TObject *Sender);
private:// User declarations
public:// User declarations
__fastcall TfrmImgSize(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmImgSize *frmImgSize;
//---------------------------------------------------------------------------
#endif
П.3.4. Текст модуля lsimgsize.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "LineSeg.h"
#include "lsImgSize.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmImgSize *frmImgSize;
//---------------------------------------------------------------------------
__fastcall TfrmImgSize::TfrmImgSize(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmImgSize::btnCancelClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
П.3.5. Текст модуля lsoptions.h
//---------------------------------------------------------------------------
#ifndef lsOptionsH
#define lsOptionsH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TfrmOptions : public TForm
{
__published:// IDE-managed Components
TButton *btnOk;
TButton *btnCancel;
TColorDialog *ColorDialog1;
TFontDialog *FontDialog1;
TCheckBox *cbLogs;
TGroupBox *gbColors;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TGroupBox *gbFonts;
TLabel *Label4;
TLabel *Label5;
void __fastcall btnCancelClick(TObject *Sender);
void __fastcall Label1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall Label2MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall Label3MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall Label4MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall Label5MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y);
private:// User declarations
public:// User declarations
__fastcall TfrmOptions(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmOptions *frmOptions;
//---------------------------------------------------------------------------
#endif
П.3.6. Текст модуля lsoptions.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "lsOptions.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmOptions *frmOptions;
//---------------------------------------------------------------------------
__fastcall TfrmOptions::TfrmOptions(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmOptions::btnCancelClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmOptions::Label1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
ColorDialog1->Color=Label1->Font->Color;
if(ColorDialog1->Execute())
Label1->Font->Color=ColorDialog1->Color;
}
//---------------------------------------------------------------------------
void __fastcall TfrmOptions::Label2MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
ColorDialog1->Color=Label2->Font->Color;
if(ColorDialog1->Execute())
Label2->Font->Color=ColorDialog1->Color;
}
//---------------------------------------------------------------------------
void __fastcall TfrmOptions::Label3MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
ColorDialog1->Color=Label3->Font->Color;
if(ColorDialog1->Execute())
Label3->Font->Color=ColorDialog1->Color;
}
//---------------------------------------------------------------------------
void __fastcall TfrmOptions::Label4MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
FontDialog1->Font=Label4->Font;
if(FontDialog1->Execute())
Label4->Font=FontDialog1->Font;
}
//---------------------------------------------------------------------------
void __fastcall TfrmOptions::Label5MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
FontDialog1->Font=Label5->Font;
if(FontDialog1->Execute())
Label5->Font=FontDialog1->Font;
}
//---------------------------------------------------------------------------
П.3.7. Текст модуля prjlineseg.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("LineSeg.cpp", frmLineSeg);
USEFORM("lsImgSize.cpp", frmImgSize);
USEFORM("lsOptions.cpp", frmOptions);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->Title = "Линейная сегментация";
Application->CreateForm(__classid(TfrmLineSeg), &frmLineSeg);
Application->CreateForm(__classid(TfrmImgSize), &frmImgSize);
Application->CreateForm(__classid(TfrmOptions), &frmOptions);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
Подобные документы
Современные системы текстурного анализа изображений. Примеры текстурной сегментации одноканальных изображений. Использование признаков, полученных на основе гистограммы яркостей второго порядка, для классификации спектрозональных аэрофотоснимков.
реферат [573,5 K], добавлен 15.01.2017Исследование вертикальных проекций яркости и размаха яркости. Программная реализация алгоритма автоматического анализа цифровых изображений номерных знаков с целью сегментации цифробуквенных символов. Разработка графического пользовательского интерфейса.
дипломная работа [1,5 M], добавлен 12.04.2013Компьютерная графика как одно из популярных направлений использования компьютера, ее виды и особенности применения. Порядок и способы создания цифровых изображений, средства и обработка. Программы САПР и их использование в инженерной деятельности.
реферат [19,1 K], добавлен 14.09.2009Компьютерная графика как наука, предметом изучения которой является создание, хранение и обработка моделей и их изображений с помощью ЭВМ. Области применения графических редакторов: Adobe Photoshop и Illustrator, Corel Draw. Растровая и векторная графика.
презентация [31,7 M], добавлен 17.01.2012Выбор методов обработки и сегментации изображений. Математические основы примененных фильтров. Гистограмма яркости изображения. Программная реализация комплексного метода обработки изображений. Тестирование разработанного программного обеспечения.
курсовая работа [1,3 M], добавлен 18.01.2017Изучение и программная реализация в среде Matlab методов обработки, анализа, фильтрации, сегментации и улучшения качества рентгеновских медицинских изображений. Цифровые рентгенографические системы. Разработка статически обоснованных алгоритмов.
курсовая работа [4,7 M], добавлен 20.01.2016Требования, состав задач, критерии функционирования, условия и программно-технические требования. Программа центроидной релаксации: математическая постановка, алгоритмы вычисления кольцевой фильтр, центр масс, кривизны. Безопасность, экологичность.
дипломная работа [1,4 M], добавлен 28.05.2008Обработка изображений на современных вычислительных устройствах. Устройство и представление различных форматов изображений. Исследование алгоритмов обработки изображений на базе различных архитектур. Сжатие изображений на основе сверточных нейросетей.
дипломная работа [6,1 M], добавлен 03.06.2022Компьютерная графика как инструмент для синтеза (создания) изображений. Характеристика векторного, растрового и фрактального типов представления изображений, трёхмерная графика. Интерфейс программы "Photoshop", пример работы по коррекции фотографий.
курсовая работа [4,5 M], добавлен 19.01.2011Анализ и постановка задач дисциплины "Компьютерная графика". Разработка структуры, функциональной схемы и программной документации. Руководство программисту и оператору. Выбор и обоснование языка программирования. Описание процедур, функций, оценок.
дипломная работа [3,6 M], добавлен 16.11.2011