Система автоматизированного анализа пространственной структуры изображений. Подсистема линейной сегментации

Компьютерная графика и обработка изображений электронно-вычислительными машинами являются наиболее важным аспектом использования ЭВМ во всех сферах человеческой деятельности. Разработка "подсистемы линейной сегментации", описание алгоритма и логики.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 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

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