Разработка системы распознавания специального изображения на основе теории векторного пространства

Алгоритм реализации векторного пространства, метод фильтрации шумов на изображении. Формально-логическая модель разработки программного обеспечения, выбор инструментальных средств его реализации. Анализ точности совпадения распознанного изображения.

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

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

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

6.3 Руководство системного администратора

Данное руководство содержит перечень указаний для введения программы в эксплуатацию.

Для разработанной системы распознавания изображений, необходима любая система, с графическим интерфейсом и установленным интерпретатором Python 2.7. Для работы программы, необходимо установить графическую библиотеку PyQT. Путь для установки Python должен быть «C:\Python27\». В случае изменения пути, необходимо сообщить об этом программисту, чтобы он изменил путь в исходном коде. Так же, при запуске программы не из под операционной системы MS Windows, путь будет изменен.

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

7. Научная новизна и практическая значимость проекта

По результатам тестирования программы, очевидно, что данная программа может успешно применяться для распознавания специальных изображений. Даже в текущем, тестовом состоянии, система показывает хорошие результаты. В настоящее время в свободном доступе отсутствуют программы, для распознавания изображений на основе теории векторного пространства. Функционал программы можно в дальнейшем применить в других, подобных системах. Так же очевидным достоинством программы, является то, что она написано на кросс-платформенном, лаконичном языке высокого уровня Python. Программы на этом языке быстро портируются на различные системы, с различными архитектурами. При необходимости проект можно довести до уровня Интернет приложения, что может позволить в разы увеличить скорость распознавания алгоритма, за счет высокой производительности серверов.

Заключение

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

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

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

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

В разделе «Безопасность жизнедеятельности» после проведения анализа условий труда и вредных факторов, возникающих при эксплуатации вычислительной техники, были рассмотрены требования к рабочему месту пользователя ПЭВМ. Была рассмотрена проблема утилизации и вторичной переработки драгоценных металлов, извлеченных из узлов ПЭВМ.

В организационно-экономическом разделе были определены стадии разработки ПС, состав работ, рассчитано время, требующееся на проведение исследования и тестирование, построен ленточный график разработки ПС, определены затраты на разработку ПС, приведены основные технико-экономические показатели проведения исследования.

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

Задачи, поставленные в данном дипломном проекте выполнены, цель дипломного проекта достигнута.

Список использованных источников:

Неймарк Ю.И. Теклина Л.Г. Реккурентные процедуры МНК при ограничениях на параметры в задачах кодирования и распознавания. Сб.

«Распознавание образов и анализ изображений: новые информационные

технологии». Т.2. -- Самара, 2003.

Daming Shi, Robert I. Damper and Steve R. Gunn, Off-line Hand-written

Chinese Character Rocognition, Scool of Computer Engineering Nanyang

University, 2003.

Basic Vector Space Search Engine Theory, LA 2600 - January, 2004 - presented by Vidiot

Преобразование Хафа // (ru.wikipedia.org/wiki/Преобразование_Хафа)

M. Kutter, F. Jordan, F. Bossen, Digital Signature Of Color Images Using Amplitude Modulation // Proc. Of the SPIE Storage and Retrieval for Image and Video Databases. V. 1997. Vol. 3022. Pp.518-526.

V.Darmstaedter, J.-F.Delaigle, J.J.Quisquater, B.Macq, Low Cost Spatial Watermarking // Computers and Graphics. 1998. Vol. 5. P.417-423.

E. Koch, J. Zhao, Towards Robust and Hidden Image Copyright Labeling. // IEEE Workshop on Nonlinear Signal and Image Processing. Greece, June 20-22, 1995. Pp. 123-132.

Описание библиотеки PyQt // (ru.wikipedia.org/wiki/PyQt)

Взлом каптчи файлообменника // (http://habrahabr.ru/post/67194/)

ГОСТ 12.0.003-74. ССБТ. «Опасные и вредные производственные

факторы. Классификация».

СанПиН 2.2.2/2.4.1340-03 «Гигиенические требования к персональным

электронно-вычислительным машинам и организация работы» .

Безопасность жизнедеятельности. /Под ред. Н.А. Белова -- М.: Знание,

2000.

ГОСТ 12.2.032-78. ССБТ. Рабочее место при выполнении работ сидя. Общие эргономические требования.

Шумилин В.К., Палькеев Е.П., Баринова В.М. и др. Охрана труда на рабочих местах с компьютером. - М.: «Нела-Информ», 2002. - 126 с.: ил.

Гетия И.Г. Безопасность при работе на ПЭВМ. - М.: МПЦ «Профессионал-Ф»,2001. - 127 с.: ил.

Гетия И.Г, Шумилин В.К., Леонтьева И.Н. и др. Экология компьютерной техники. Учебное пособие. - М.: МГУПИ, 2007. - 69 с.

«Методические указания по выполнению курсовой работы для студентов специальности 22.01.05 на тему «Организация, планирование и управление предприятием машиностроительной промышленности», М., МГАПИ, 2003.

Чаплыгин В.А. Организационно-экономический раздел дипломных работ научно-исследовательского характера. М., МГАПИ. 2000.

Методические указания по сбору материалов на преддипломной практике и выполнению организационно-экономического раздела дипломных проектов. М., МГАПИ, 2004.

Капелюш Г.С., Шестоперов С.Б. Технико-экономическое обоснование дипломных проектов по созданию программных средств вычислительной техники и информатики. Учебное пособие для студентов специальности 22.01. - М., МГАПИ, 2001.

«Сетевые графики и планирование», учебное пособие, Н. И. Новицкий, М., Высшая школа, 2004.

Прайс-лист ООО «Хюгель Компьютерс», 10.11.2012.

Прайс-лист ООО «Компьютерный Мир», 10.11.2012.

Приложение А

ЛИСТИНГ ПРОГРАММЫ.

# -*- encoding: utf-8 -*-

import sys

import imp

from PyQt4 import QtCore, QtGui

from PyQt4.QtCore import QObject, SIGNAL

import engine

fname = ''

def trUtf8(Instance, SourceText):

return QObject.trUtf8(Instance, SourceText

def processCaptcha(path,qobj):

res = engine.captcha().decode(path)

qobj.main_w.label_3.clear()

qobj.main_w.textEdit.append( '==================')

qobj.main_w.textEdit.append( trUtf8(qobj,'Начинаем распознавание...'))

for probability,letter in res:

qobj.main_w.textEdit.append( trUtf8(qobj,'%s - с вероятностью %s'%(letter,probability)))

qobj.main_w.label_3.setText(qobj.main_w.label_3.text() + letter.upper())

#print "",letter

qobj.main_w.textEdit.append( '==================')

qobj.main_w.textEdit.append( trUtf8(qobj,'Распознавание успешно завершено!'))

qobj.main_w.label_4.setPixmap( QtGui.QPixmap('tmp/0.gif') )

qobj.main_w.label_5.setPixmap( QtGui.QPixmap('tmp/1.gif') )

qobj.main_w.label_6.setPixmap( QtGui.QPixmap('tmp/2.gif') )

qobj.main_w.label_7.setPixmap( QtGui.QPixmap('tmp/3.gif') )

qobj.main_w.label_8.setPixmap( QtGui.QPixmap('tmp/4.gif') )

qobj.main_w.label_9.setPixmap( QtGui.QPixmap('tmp/5.gif') )

class Ui(QtGui.QMainWindow):

#sg = signals()

def __init__(self, parent=None):

super(Ui,self).__init__(parent)

self.main_w = imp.load_source('main_frm', 'UI/main_frm.py').Ui_MainWindow()

self.main_w.setupUi(self)

main_frm = self.main_w

#QObject.connect(self.main_w.pushButton, QtCore.SIGNAL("clicked()"), sg.on_pushButton_click)

self.main_w.pushButton.clicked.connect(self.on_pushButton_click)

self.main_w.pushButton_2.clicked.connect(self.on_pushButton2_click)

def on_pushButton_click(self):

global fname

fname = QtGui.QFileDialog.getOpenFileName(self,u"Веберите капчу")

if fname:

self.main_w.textEdit.append(trUtf8(self,'Открытие капчи: ')+fname)

self.main_w.label.setPixmap(QtGui.QPixmap(fname))

#processCaptcha(fname,self)

def on_pushButton2_click(self):

if fname != '' : processCaptcha(fname,self)

if __name__=='__main__':

app = QtGui.QApplication(sys.argv)

window = Ui()

window.show()

sys.exit(app.exec_())

from PIL import Image

import hashlib

import time

import os

from matplotlib import pylab

import matplotlib.pyplot as plt

from PIL import Image, ImageOps, ImageEnhance

#from opencv import cv, highgui, adaptors

import cv

import math

from operator import itemgetter

class VectorCompare:

def magnitude(self,concordance):

total = 0

for word,count in concordance.iteritems():

total += count ** 2

return math.sqrt(total)

def relation(self,concordance1, concordance2):

relevance = 0

topvalue = 0

for word, count in concordance1.iteritems():

if concordance2.has_key(word):

topvalue += count * concordance2[word]

return topvalue / (self.magnitude(concordance1) * self.magnitude(concordance2))

class captcha:

def buildvector(self,im):

d1 = {}

count = 0

for i in im.getdata():

d1[count] = i

count += 1

return d1

def decode(parent,path):

v = VectorCompare()

iconset = ['0','1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

imageset = []

for letter in iconset:

for img in os.listdir('./iconset/%s/'%(letter)):

temp = []

if img != "Thumbs.db":

temp.append(parent.buildvector(Image.open("./iconset/%s/%s"%(letter,img))))

imageset.append({letter:temp})

img = Image.open('%s'%path)

img = ImageOps.invert(img)

img = ImageEnhance.Contrast(img).enhance(1.9)

clrs = [0 for x in range (0,255)]

img = img.convert("P")

his = img.histogram()

clrs = {}

for i in range(256):

clrs[i] = his[i]

filt = []

for j,k in sorted(clrs.items(), key=itemgetter(1), reverse=True)[:15]:

if j != 0 and k > ( (img.size[0] * img.size[1])/100*5) :

filt.append(j)

#print filt

#print "max = %d,max_ind = %d"%(max,max_ind)

im = Image.new("P",img.size,255)

for x in range(img.size[1]):

for y in range(img.size[0]):

pix = img.getpixel((y,x))

if pix in range(filt[0]-3,filt[0]+3):

im.putpixel((y,x),255)

else:

im.putpixel((y,x),0)

im = parent.RemoveLines(im)

#im = parent.Morphology(im)

#im.save('tmp.bmp')

letters = parent.FindDividingCols(im)

'''

im2 = Image.new("P",im.size,255)

im = im.convert("P")

graph_im = Image.new("P",im.size,255)

temp = {}

for x in range(im.size[1]):

for y in range(im.size[0]):

pix = im.getpixel((y,x))

temp[pix] = pix

if pix == 220 or pix == 227:

im2.putpixel((y,x),0)

graph_im.putpixel((y,x),1)

#else: graph_im.putpixel((y,x),0)

inletter = False

foundletter=False

start = 0

end = 0

#graph_im = Image.new("P",im.size,255)

#im2.Copy(graph_im)

parent.FindDividingCols(graph_im,im2)

letters = []

for y in range(im2.size[0]): # slice across

for x in range(im2.size[1]): # slice down

pix = im2.getpixel((y,x))

if pix != 255:

inletter = True

if foundletter == False and inletter == True:

foundletter = True

start = y

if foundletter == True and inletter == False:

foundletter = False

end = y

letters.append((start,end))

inletter=False

count = 0

result = []

print letters'''

count = 0

result = []

for img in os.listdir('tmp'):

os.remove('tmp/%s'%img)

for letter in letters:

m = hashlib.md5()

im3 = im.crop(( letter[0] , 0, letter[1],im.size[1] ))

#im3 = parent.Morphology(im3)

for y in range(im3.size[0]): # slice across

for x in range(im3.size[1]): # slice down

pix = im3.getpixel((y,x))

if pix == 0:

im3.putpixel((y,x),255)

else:

im3.putpixel((y,x),0)

im3.save('tmp/%d.gif'%count)

guess = []

for image in imageset:

for x,y in image.iteritems():

if len(y) != 0:

guess.append( ( v.relation(y[0],parent.buildvector(im3)),x) )

guess.sort(reverse=True)

result.append(guess[0])

count += 1

print result

return result

def FindDividingCols(self,img):

lst = []

for i in range(img.size[0]):

lst.append(sum(1 for j in range(img.size[1]) if img.getpixel((i, j)) != 0))

st = 0

end = 0

porog = 1.5

cols = []

inLetter = False

for i in range (len(lst)):

if inLetter == False:

if (lst[i] > porog):

inLetter = True

st = i

else:

if (lst[i] < porog):

inLetter = False

end = i

if (sum( lst[x] for x in range(st,end)) > 3):

cols.append((st,end))

#print cols

ax1 = pylab.subplot(212)

pylab.imshow(img, cmap=pylab.cm.gray, shape=(img.size[0], img.size[1]), interpolation='bilinear')

pylab.subplot(211, sharex=ax1)

pylab.plot(lst)

#print cols

pylab.show()

return cols

def cropMe(self,img):

lst = []

res = Image.new("P",img.size,255)

for i in range(img.size[1]):

lst.append(sum(1 for j in range(img.size[0]) if img.getpixel((j, i)) != 0))

#print lst

for x in range(len(lst)):

if (lst[x] != 0):

res = img.crop( ( 0 , lst[x], img.size[0],img.size[1] ) )

break

#for x in range(len(lst),0,-1):

# if (lst[x] != 0):

# res = img.crop( ( 0 , lst[x], img.size[0],img.size[1] ) )

# break

#im3 = im.crop(( letter[0] , 0, letter[1],im.size[1] ))

return res

def RemoveLines(self,img):

dst = cv.CreateImage( img.size, cv.IPL_DEPTH_8U, 1 )

cv.SetData(dst, img.tostring())

storage = cv.CreateMemStorage(0)

lines = cv.HoughLines2( dst, storage, cv.CV_HOUGH_PROBABILISTIC, 1, cv.CV_PI/180, 35, 35, 3 )

for line in lines:

cv.Line( dst, line[0], line[1], 0, 2, 0 )

pil_im = Image.fromstring("L", cv.GetSize(dst), dst.tostring())

return pil_im

def Morphology(self,img):

pos = 1

dst = cv.CreateImage( img.size, cv.IPL_DEPTH_8U, 1 )

src = cv.CreateImage( img.size, cv.IPL_DEPTH_8U, 1 )

cv.SetData(src, img.tostring())

element = cv.CreateStructuringElementEx(pos*2+1, pos*2+1, pos, pos, cv.CV_SHAPE_RECT)

cv.Dilate(src, dst, element, 1)

src = dst

pos = 1

element = cv.CreateStructuringElementEx(pos*2+1, pos*2+1, pos, pos, cv.CV_SHAPE_RECT)

cv.Erode(src, dst, element, 1)

pil_im = Image.fromstring("L", cv.GetSize(dst), dst.tostring())

return pil_im

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'main_frm.ui'

#

# Created: Sun Jan 13 23:49:59 2013

# by: PyQt4 UI code generator 4.9.6

#

# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:

_fromUtf8 = QtCore.QString.fromUtf8

except AttributeError:

def _fromUtf8(s):

return s

try:

_encoding = QtGui.QApplication.UnicodeUTF8

def _translate(context, text, disambig):

return QtGui.QApplication.translate(context, text, disambig, _encoding)

except AttributeError:

def _translate(context, text, disambig):

return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName(_fromUtf8("MainWindow"))

MainWindow.setWindowModality(QtCore.Qt.ApplicationModal)

MainWindow.resize(597, 370)

self.centralwidget = QtGui.QWidget(MainWindow)

self.centralwidget.setObjectName(_fromUtf8("centralwidget"))

self.groupBox = QtGui.QGroupBox(self.centralwidget)

self.groupBox.setGeometry(QtCore.QRect(0, 0, 211, 181))

self.groupBox.setObjectName(_fromUtf8("groupBox"))

self.label = QtGui.QLabel(self.groupBox)

self.label.setGeometry(QtCore.QRect(10, 20, 181, 61))

self.label.setLayoutDirection(QtCore.Qt.LeftToRight)

self.label.setText(_fromUtf8(""))

self.label.setScaledContents(False)

self.label.setAlignment(QtCore.Qt.AlignCenter)

self.label.setObjectName(_fromUtf8("label"))

self.pushButton = QtGui.QPushButton(self.groupBox)

self.pushButton.setGeometry(QtCore.QRect(40, 140, 75, 23))

self.pushButton.setObjectName(_fromUtf8("pushButton"))

self.pushButton_2 = QtGui.QPushButton(self.groupBox)

self.pushButton_2.setGeometry(QtCore.QRect(120, 140, 75, 23))

self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))

self.groupBox_2 = QtGui.QGroupBox(self.centralwidget)

self.groupBox_2.setGeometry(QtCore.QRect(210, 0, 381, 181))

self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))

self.label_3 = QtGui.QLabel(self.groupBox_2)

self.label_3.setGeometry(QtCore.QRect(20, 30, 351, 61))

font = QtGui.QFont()

font.setFamily(_fromUtf8("Times New Roman"))

font.setPointSize(36)

font.setBold(True)

font.setWeight(75)

self.label_3.setFont(font)

self.label_3.setText(_fromUtf8(""))

self.label_3.setObjectName(_fromUtf8("label_3"))

self.label_9 = QtGui.QLabel(self.groupBox_2)

self.label_9.setGeometry(QtCore.QRect(190, 120, 21, 31))

self.label_9.setText(_fromUtf8(""))

self.label_9.setObjectName(_fromUtf8("label_9"))

self.label_4 = QtGui.QLabel(self.groupBox_2)

self.label_4.setGeometry(QtCore.QRect(60, 120, 21, 31))

self.label_4.setText(_fromUtf8(""))

self.label_4.setObjectName(_fromUtf8("label_4"))

self.label_5 = QtGui.QLabel(self.groupBox_2)

self.label_5.setGeometry(QtCore.QRect(90, 120, 21, 31))

self.label_5.setText(_fromUtf8(""))

self.label_5.setObjectName(_fromUtf8("label_5"))

self.label_6 = QtGui.QLabel(self.groupBox_2)

self.label_6.setGeometry(QtCore.QRect(120, 120, 21, 31))

self.label_6.setText(_fromUtf8(""))

self.label_6.setObjectName(_fromUtf8("label_6"))

self.label_7 = QtGui.QLabel(self.groupBox_2)

self.label_7.setGeometry(QtCore.QRect(150, 120, 21, 31))

self.label_7.setText(_fromUtf8(""))

self.label_7.setObjectName(_fromUtf8("label_7"))

self.label_8 = QtGui.QLabel(self.groupBox_2)

self.label_8.setGeometry(QtCore.QRect(170, 120, 21, 31))

self.label_8.setText(_fromUtf8(""))

self.label_8.setObjectName(_fromUtf8("label_8"))

self.groupBox_3 = QtGui.QGroupBox(self.centralwidget)

self.groupBox_3.setGeometry(QtCore.QRect(0, 180, 591, 151))

self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))

self.textEdit = QtGui.QTextEdit(self.groupBox_3)

self.textEdit.setGeometry(QtCore.QRect(10, 20, 571, 121))

self.textEdit.setReadOnly(True)

self.textEdit.setObjectName(_fromUtf8("textEdit"))

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtGui.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 597, 21))

self.menubar.setObjectName(_fromUtf8("menubar"))

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtGui.QStatusBar(MainWindow)

self.statusbar.setObjectName(_fromUtf8("statusbar"))

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

MainWindow.setWindowTitle(_translate("MainWindow", "Captcha Crack", None))

self.groupBox.setTitle(_translate("MainWindow", "Captcha", None))

self.pushButton.setText(_translate("MainWindow", "Открыть", None))

self.pushButton_2.setText(_translate("MainWindow", "Распознать", None))

self.groupBox_2.setTitle(_translate("MainWindow", "Результат", None))

self.groupBox_3.setTitle(_translate("MainWindow", "Лог", None))

Размещено на www.allbest.


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

  • Общая характеристика закона Хипса и Ципфа. Особенности ранжированного поиска. Рассмотрение примеров косинусной близости. Анализ основных способов сокращения индекса. Знакомство с основными моделями векторного пространства. Проблемы отсечения кластеров.

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

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

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

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

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

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

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

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

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

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

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

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

    дипломная работа [3,1 M], добавлен 19.01.2017

  • Анализ необходимости в инструменте, который позволял бы автоматически генерировать изображение без необходимости ручной отрисовки. Основные концепции и операторы языка Postscript. Использование Postscript для генерации изображения циферблата манометра.

    отчет по практике [269,3 K], добавлен 16.05.2017

  • Понятие системы распознавания образов. Классификация систем распознавания. Разработка системы распознавания формы микрообъектов. Алгоритм для создания системы распознавания микрообъектов на кристаллограмме, особенности его реализации в программной среде.

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

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

    реферат [2,1 M], добавлен 28.09.2014

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