Курсовая работа по дисциплине Автоматизированная обработка аэрокосмической информации
Введение
В качестве приёмника света раньше использовались фотоматериалы: фотопластинки, фотоплёнка, фотобумага. Позже появились телевизионные камеры и ФЭУ (фотоэлектрический умножитель). Но прогресс не стоит на месте и в конце 60-х - начале 70-х годов XX века начали разрабатываться так называемые "Приборы с Зарядовой Связью", что сокращённо пишется как ПЗС.
На сегодняшний день ПЗС-матрицы нашли широкое применение: от цифровых фото и видео камер и мобильных телефонов, до телескопов и спутников. Это объясняется тем, что стало возможным преобразование спроецированного на неё оптического изображения в аналоговый электрический сигнал или в поток цифровых данных при наличии АЦП (аналого-цифрового преобразователя) непосредственно в составе матрицы.
Несмотря на все достоинства такие светочувствительные матрицы не идеальны, вследствие чего нередко встречаются дефекты изображения, проявляющиеся только на одной ячейке или небольшой группе ячеек. Наиболее распространены так называемые дефекты "горячие пиксели" и "битые пиксели". Первые проявляются при условии, что значение выходного сигнала имеет неверную зависимость от входного, или выходной сигнал в наибольшей степени зависит от иных факторов (температуры, значения соседних пикселей).
"Битые пиксели" проявляются в неизменности выходного сигнала нескольких пикселей в цифровом файле и, как правило, имеют черный цвет на изображении. Подчас столкнувшись с таким дефектом нецелесообразно работать с изображением, поскольку свойства объекта на снимке могут не соответствовать действительным свойствам объекта, поэтому первым делом необходимо провести восстановление "битых пикселей". Именно этой проблеме посвящена курсовая работа, цель которой - реализовать фильтр, восстанавливающий "битые пиксели" в дефектных изображениях.
Для достижения цели были поставлены следующие задачи:
) Выявить характерные свойства "битых пикселей", проанализировав дефектные изображения.
2) В программном комплексе Microsoft Visual Studio 2008 разработать программное обеспечение, а в частности - реализовать фильтр, позволяющий выполнить восстановление.
) Сделать выводы, обработав дефектные снимки.
Выбор в качестве среды разработки ПО Microsoft Visual Studio 2008, объясняется хорошими теоретическими и практическими знаниями автора в программировании на языке С++, а так же - опытом реализации программ в этой среде.
Конечно, имея дефектное изображение, не проще ли получить новое свободное от артефактов? Очевидно, что нет. Матрица с "битыми" светочувствительными элементами будет постоянно давать дефектное изображение. Замена представляется не всегда допустимой, в виду высокой стоимости, а подчас не возможной, говоря о сенсоре, установленном на спутнике. К тому же в астрометрии и фотометрии малых тел Солнечной системы (астероиды, кометы) используют снимки с большими выдержками, при этом вероятность появления "битых пикселей", которые могли и не проявляться при нормальной выдержке, возрастает. По этим простым причинам проблема восстановления "битых пикселей" становится особенно актуальной.
Глава 1. Анализ дефектных изображений
В общем случае причиной появления "битых пикселей" является константная неисправность элемента матрицы. Проблема кроется в самой технологии изготовления матриц. Размер пикселя очень мал, поэтому при его формировании любой дефект может привести к нестабильности или неработоспособности. Дефекты это не только случайное попадание пыли, а в большей степени чистота материалов и качество подложки матрицы. При изготовлении подложка с кристаллами много раз подвергается различным воздействиям (температура, промывка, процессы литографии и т.д.) и в результате выход реально набракованных кристаллов в любой микропроцессорной технологии очень низок. Абсолютно свободных от горячих или хотя бы битых пикселей матриц не бывает, несмотря на высокую точность используемых в ее производстве технологий. Каждая матрица по-своему уникальна и двух совершенно одинаковых матриц не существует.
Поскольку изготовление матрицы - процесс дорогой и трудоёмкий, а проверить её на неисправность можно лишь после полного изготовления, производители стараются отбраковывать продукцию как можно реже, относя её по результатам теста к одному из классов качества.
В виду того, что каждая матрица уникальная, возникает вопрос - будут ли битые пиксели на изображениях, полученных разными приборами, обладать одинаковыми свойствами. Для черно-белого изображения, то есть для изображения обладающего одним каналом, теоретически пиксель будет считаться "битым", если отображает цвет уровня 0 (черный) и резко выделяется из соседних пикселей. (Рис.1).
Что касается цветного снимка, то каждый одиночный пиксель состоит из трех субпикселей различных цветов: красный, зеленый, синий (так называемая модель RGB). Каждый субпиксель способен отображать 255 оттенков цвета (уровень цвета), соответственно, теоретически, если все три субпикселя отображают цвет уровня 0 - отображается черный пиксель. (Рис.1). При условии, что он ощутимо выделяется от соседних пикселей, считается "битым".
Рис. 1. Вариации уровня цвета
Анализ имеющихся дефектных изображений заключается в получении значений каждого пикселя для черно-белого изображения и значений каждого субпикселя для цветного, с целью их сравнения и выявления характерных свойств "битых пикселей". В результате чего действительные значения (полученные в результате анализа) в ряде случаях немного отличались от теоретических значений дефектных пикселей.
Анализ показал, что для черно-белых изображений значения уровня цвета варьировались строго от 0 до 1. В большинстве случаев это значение было равно 0, уровень цвета 1 встречался крайне редко.
В качестве примера рассмотрим снимок звездного неба, на котором отчетливо видна вертикальная черная полоса - битые пиксели.
При анализе столбца с битыми пикселями дефектного изображения, заметно, что значения уровня цвета пикселей различны. (Рис.2). Диапазону от 0 до 1055 соответствует уровень цвета 0 (крайне редко 1), что подтверждает факт наличия битых пикселей, в диапазоне от 1055 и выше пиксели отличаются в большинстве случаев по уровню цвета между собой и всегда от 0, это свидетельствует о том, что пиксели "здоровые".
битый пиксель дефектное изображение
Рис. 2. Зависимость номера пикселя столбца от значения уровня цвета для черно-белого изображения
Рассмотрим цветное изображение, на котором присутствуют битые пиксели.
В ходе анализа выяснилось, что для цветных изображений отклонения уровня цвета от 0 наблюдается немного больше, вплоть до 3 очень редко 4 для каждого из трех каналов. (Рис.3).
Рис. 3. Зависимость номера пикселя столбца от значения уровня цвета для цветного изображения
После сбора информации и выявления свойств, которыми обладают "битые пиксели" этап анализа является завершенным, и можно приступить к реализации программного обеспечения и фильтра восстанавливающего "битые пиксели".
Глава 2. Реализация программного обеспечения и фильтра восстановления
В качестве среды разработки выбрано ПО Microsoft Visual Studio 2008, представляющая собой мощный инструмент с высоким качеством кода на протяжении всего цикла разработки, от проектирования до реализации.
Первоначально был создан проект и добавлены специальные заголовочные файлы и библиотеки:
using namespace System;namespace System:: ComponentModel;namespace System:: Collections;namespace System:: Windows:: Forms;namespace System:: Data;namespace System:: Drawing;namespace System:: IO;
обеспечивающие возможность при открытии изображения формата jpeg, bmp "работать" с ним, в том смысле, что вся информация о значениях уровня цвета каждого пикселя, благодаря написанному коду, хранится в одномерном массиве данных. На этом принципе и построена идея реализации данной программы и фильтра, так как мы имеем возможность оперировать данными массива по средствам свойств, событий, функций и команд.
Код, осуществляющий возможность работы и открытия изображения:
OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;->InitialDirectory = "c: \";->Filter = "All files (*. *) |*. *";->RestoreDirectory = true;(openFileDialog1->ShowDialog () == System:: Windows:: Forms:: DialogResult:: OK)
{( (myStream = openFileDialog1->OpenFile ())! = nullptr)
{= gcnew Bitmap (myStream, true);->Image = image1;
}
}= gcnew Bitmap (myStream, true);rect = Rectangle (0, 0, image1->Width, image1->Height);:: Drawing:: Imaging:: BitmapData^ bmpData = image1->LockBits (rect, System:: Drawing:: Imaging:: ImageLockMode:: ReadWrite, image1->PixelFormatbytes = bmpData->Stride * image1->Height;<Byte>^msv = gcnew array<Byte> (bytes);<Byte>^msc = gcnew array<Byte> (bytes);ptr = bmpData->Scan0;:: Runtime:: InteropServices:: Marshal:: Copy (ptr, msv, 0, msv->Length);:: Runtime:: InteropServices:: Marshal:: Copy (ptr, msc, 0, msc->Length);
Естественно, следует помнить, что для черно-белого и цветного изображения при одинаковом количестве пикселей массивы данных будут различаться. Объясняется это тем, что каждый одиночный пиксель состоит из трех субпикселей, каждый из которых способен отображать 255 оттенков цвета, поэтому массив значений уровня цвета для цветного изображения будет в 3 раза больше.
Итак, открыв изображение, оно визуализируется в специальном элементе посредствам прописанного кода. Так же машина хранит в оперативной памяти массив, необходимо найти в нем "битые пиксели", используя выявленные при анализе свойства. В общем случае это осуществляется следующим образом: двойной цикл обеспечивает проход по "столбцам" изображения, находя в каждом одиночные "битые пиксели" либо их последовательность (подряд идущие). (Рис.4).
Рис. 4. Принцип работы циклов
Цикл, обеспечивающий проход по столбцам, в общем виде выглядит следующим образом: