Курсовая работа по обработке изображений
- Дата: 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 в долгих цикличных процедурах было бы не лишним, так как это создаёт «эффект независшего приложения» (выполняется его периодическое обновление, а также обработка системных событий).
