Курсовая работа по обработке изображений
- Опубликовано: 26.12.2007
Настоящие методические указания предназначены, прежде всего, для студентов моей специальности 230101 «Вычислительные машины, комплексы, системы и сети», которые хотели бы успешно выполнить курсовую работу по дисциплине с громким названием «Обработка изображений, распознавание образов и мультимедиа». Также они могут быть полезны для студентов и других специальностей и вообще всех интересующихся обработкой изображений и распознаванием текста.
- Задание на курсовую работу
- Документный интерфейс
- Открытие изображения
- Работа с изображением и его отображение
- Работа с точками и цветами
- Яркость точки и гистограммы изображения
- Изменения яркости и контрастности
- Изменение цветности (бинаризация, оттенки серого, негатив)
- Наложение шума и фильтры шумоподавления (сглаживания)
- Методы выделения границ
- Распознавание текста
- Непрерывное преобразование Фурье
- Дискретное преобразование Фурье
- Преобразование Уолша-Адамара
- Источники информации
Работа с изображением и его отображение
Желательно иметь несколько компонентов, хранящих изображения. Это нужно, во-первых, для более быстрой работы (если работать с изображением, которое невидно пользователю, то система не затрачивает времени на постоянную прорисовку каждого изменения; гораздо быстрее один раз предъявить конечный результат), а во-вторых, для возможности отката/повтора действия. Кроме того, это может пригодиться для каких-либо алгоритмов, формирующих результирующее изображение отдельно от исходного и на его основе. Здесь используются визуальные компоненты-контейнеры класса TImage, а также их невизуальные «составляющие» вроде TBitmap; при этом копирование (именно копирование, а не ссылка) содержимого осуществляется так:
var Bitmap: TBitmap; Image: TImage; begin Bitmap := TBitmap.Create; Bitmap.Assign (Image.Picture); // из Image – в Bitmap … Image.Picture.Assign (Bitmap); // из Bitmap – в Image Bitmap.Free; end;
Дополнительно может понадобиться создание пустого изображения с необходимыми размерами и копирование в него какой-либо части исходного. Это делается так:
var Bitmap: TBitmap; BitmapArea: TRect; Image: TImage; begin Bitmap := TBitmap.Create; with BitmapArea do begin Left := 0; Top := 0; Right := Image.Width – 1; Bottom := Image.Height – 1; end; with Bitmap do begin Height := Image.Height; Width := Image.Width; Canvas.CopyMode := CMSrcCopy; Canvas.CopyRect (BitmapArea, Image.Canvas, BitmapArea); end; Image.Picture.Assign (Bitmap); Bitmap.Free; end;
Использование всяких линеек процесса (классы TProgressBar или TGauge) – это, конечно, красиво, но может существенно замедлить работу алгоритмов. А вот использовать метод Application.ProcessMessages в долгих цикличных процедурах было бы не лишним, так как это создаёт «эффект независшего приложения» (выполняется его периодическое обновление, а также обработка системных событий).