Разработка методов совмещения фрагментов и инструментария на примере формирования панорамных изображений медицинских микроскопических препаратов
Анализ системы получения изображений микропрепарата Атлант-микро. Разработка модели, алгоритмов совмещения фрагментов. Разработка пользовательского интерфейса системы. Оценка качества совмещения фрагментов алгоритмом с бинаризацией на основе гистограмм.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 23.09.2012 |
Размер файла | 8,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
if(vbin10_dif_mask[i]>max)
{
max=vbin10_dif_mask[i];
x1=vdx[i];
}
}// конец расчёта маски дифференса и поиска максимума
Form12->allg4_differens_mask.push_back(99999999);
vpic.push_back(max);
// обработка маской для сшивки по вертикали
Mask5x5vert(Ltmp,VPP[k].L);
Mask5x5vert(Ltmp1,VPP[k+1].L);
f.Binarization(VPP[k].L,Ltmp,7);
f.Binarization(VPP[k+1].L,Ltmp1,7);
Ltmp=VPP[k].LB;
Ltmp1=VPP[k+1].LB;
size_t sumdif2;
x2=x1;
y2=0;
for(size_t j=5;j<H-5;++j)// средний профиль по оси Y
{
double c_bin1=0,c_bin2=0;
for(size_t i=x2;i<(W-5);++i)
{
c_bin1+=(double)(Ltmp(i,j).comp[lyr::r_rgb]+
Ltmp(i,j).comp[lyr::g_rgb]+Ltmp(i,j).comp[lyr::b_rgb])/3.0;
c_bin2+=(double)(Ltmp1(i-x2+5,j).comp[lyr::r_rgb]+
Ltmp1(i-x2+5,j).comp[lyr::g_rgb]+Ltmp1(i-x2+5,j).comp[lyr::b_rgb])/3.0;
}
vbin10_1_y.push_back(c_bin1/(double)(W-5-x2));
vbin10_2_y.push_back(c_bin2/(double)(W-5-x2));
}// конец расчёта среднего профиля по оси Y
double min=99999999;
for(int x=0;x<5;++x)// расчёт дифференса при смещении картинок отнсительно друг друга вверх и вниз
{
double sdifbin10=0;
double sdifbin10_1=0;
for(size_t i=x;i<vbin10_1_y.size();++i)
{
sdifbin10+=abs(vbin10_1_y[i]-vbin10_2_y[i-x]);
sdifbin10_1+=abs(vbin10_1_y[i-x]-vbin10_2_y[i]);
}
sdifbin10/=(double)(vbin10_1_y.size()-x);
sdifbin10_1/=(double)(vbin10_1_y.size()-x);
vbin10_dif_up.push_back(sdifbin10);
vbin10_dif_down.push_back(sdifbin10_1);
vdy_up.push_back(x);
vdy_down.push_back(-x);
if(sdifbin10<min)
{
min=sdifbin10;
y2=x;
}
if(sdifbin10_1<min)
{
min=sdifbin10_1;
y2=-x;
}
}// конец расчёта дифференса при смещении картинок отнсительно друг друга вверх и вниз
vdeltax.push_back(x2);
vdeltay.push_back(y2);
VPan[k+1]->Left=VPan[k]->Left+x2;
VPan[k+1]->Top=VPan[k]->Top+y2;
VPan[k+1]->Refresh();
ScrollBox1->Refresh();
++ProgressBar1->Position;
ProgressBar1->Refresh();
}// конец цикла по x_idx
double mid=0;
size_t count=0;
double mid_y=0;
size_t count_y=0;
for(size_t i=0;i<vdeltax.size();++i)
{
if(vpic[i]>0.011)
{
mid+=vdeltax[i];
++count;
mid_y+=vdeltay[i];
++count_y;
}
}
if(count==0)++count;
if(count_y==0)++count_y;
mid/=static_cast<double>(count);
mid_y/=static_cast<double>(count_y);
size_t n=ColCount;
for(size_t i=0;i<vpic.size();++i)
{
if(Vfixed[n*y_idx+i])
{
continue;
}
if(vpic[i]<0.011)
VPan[n*y_idx+i+1]->Left=VPan[n*y_idx+i]->Left+mid;
else
VPan[n*y_idx+i+1]->Left=VPan[n*y_idx+i]->Left+vdeltax[i];
}
} // конец цикла по y_idx
vector<int> vrowpart;
vrowpart.clear();
for(int y_idx=1;y_idx<RowCount;++y_idx)
{
vrowpart.clear();
vrowpart.push_back(ColCount*y_idx);
for(int x_idx=1;x_idx<=ColCount;++x_idx)
{
if(Vfixed[ColCount*y_idx+x_idx])
{
continue;
}
if(VPP[ColCount*y_idx+x_idx-1].idxRight>1000)
{
Vfixed[ColCount*y_idx+x_idx-1]=true;
}
if(VPP[ColCount*y_idx+x_idx].StitchedLeft&&x_idx<ColCount)
vrowpart.push_back(ColCount*y_idx+x_idx);
else
{
int xmax=0;
int idxT=VPP[vrowpart[0]].idxTop;
for(size_t i=0;i<vrowpart.size();++i)
if(VPP[vrowpart[i]].idxTop>idxT)
{
xmax=i;
idxT=VPP[vrowpart[i]].idxTop;
}
// сшивка по кадру
vector<double> vbin101;
vector<double> vbin102;
vector<double> vdif;
vector<double> vdif1;
vector<double> vdif_mask;
vector<int> vdx1;
vector<int> vdx2;
vector<int> vdy;
size_t idx=vrowpart[xmax]-ColCount;
size_t idx1=vrowpart[xmax];
int dTop=VPan[idx1]->Top;
int dLeft=VPan[idx1]->Left;
Ltmp=VPP[idx].L;
Ltmp1=VPP[idx1].L;
Mask5x5(VPP[idx].LB,Ltmp);
Mask5x5(VPP[idx1].LB,Ltmp1);
f.Binarization(Ltmp,VPP[idx].LB,7);//7 порог
f.Binarization(Ltmp1,VPP[idx1].LB,7);//7
double max=0;
for(size_t k=0;k<451;k+=25)
{
vbin101.clear();
vbin102.clear();
vdif.clear();
vdif_mask.clear();
vdx1.clear();
vdx2.clear();
for(size_t i=5;i<(W-5);++i)
{
double c_bin1=0;
for(size_t j=H-5-50-k;j<H-5-k;++j)
c_bin1+=(double)(Ltmp(i,j).comp[lyr::r_rgb]+Ltmp(i,j).comp[lyr::g_rgb]+
Ltmp(i,j).comp[lyr::b_rgb])/3.0;
vbin101.push_back(c_bin1/(double)(45));
}
for(size_t i=5;i<(W-5);++i)
{
double c_bin2=0;
for(size_t j=5;j<90;++j)
c_bin2+=(double)(Ltmp1(i,j).comp[lyr::r_rgb]+Ltmp1(i,j).comp[lyr::g_rgb]+
Ltmp1(i,j).comp[lyr::b_rgb])/3.0;
vbin102.push_back(c_bin2/(double)(45));
}
for(int x=0;x<vbin101.size()-150;++x)
{
double sdifbin10=0;
double sdifbin10_1=0;
for(size_t i=x;i<vbin101.size();++i)
{
sdifbin10+=abs(vbin101[i]-vbin102[i-x]);
sdifbin10_1+=abs(vbin101[i-x]-vbin102[i]);
}
sdifbin10/=(double)(vbin101.size()-x);
sdifbin10_1/=(double)(vbin101.size()-x);
vdif.push_back(sdifbin10);
vdif1.push_back(sdifbin10_1);
vdx1.push_back(x);
vdx2.push_back(-x);
}
vdif_mask.resize(vdif.size(),0);
for(size_t i=3;i<vdif_mask.size()-3;++i)
{
double t=abs(-vdif[i-3]+vdif[i]*2-vdif[i+3]);
double t1=abs(-vdif1[i-3]+vdif1[i]*2-vdif1[i+3]);
if(t>max)
{
max=t;
y1=0;
x1=vdx1[i];
vdif_mask[i]=t;
}
if(t1>max)
{
max=t1;
y1=0;
x1=vdx2[i];
vdif_mask[i]=t1;
}
}
}
x2=x1;
y2=y1;
vbin101.clear();
vbin102.clear();
vdif.clear();
vdif1.clear();
vdif_mask.clear();
vdx1.clear();
vdx2.clear();
vbin101.reserve(100);
vbin102.reserve(100);
vdif.reserve(100);
vdif1.reserve(100);
vdif_mask.reserve(100);
vdx1.reserve(100);
vdx2.reserve(100);
Ltmp=VPP[idx].L;
Ltmp1=VPP[idx1].L;
Mask5x5vert(VPP[idx].LB,Ltmp);
Mask5x5vert(VPP[idx1].LB,Ltmp1);
f.Binarization(Ltmp,VPP[idx].LB,7);//7 порог
f.Binarization(Ltmp1,VPP[idx1].LB,7);//7
if(x1>=0)
for(size_t j=H/4;j<H-5;++j)// средний профиль по оси Y
{
double c_bin1=0,c_bin2=0;
for(size_t i=x1;i<(W-5);++i)
{
c_bin1+=(double)(Ltmp(i,j).comp[lyr::r_rgb]+Ltmp(i,j).comp[lyr::g_rgb]+
Ltmp(i,j).comp[lyr::b_rgb])/3.0;
c_bin2+=(double)(Ltmp1(i-x1+5,j-H/4+5).comp[lyr::r_rgb]+
Ltmp1(i-x1+5,j-H/4+5).comp[lyr::g_rgb]+Ltmp1(i-x1+5,j-H/4+5).comp[lyr::b_rgb])/3.0;
}
vbin101.push_back(c_bin1/(double)(W-5-x1));
vbin102.push_back(c_bin2/(double)(W-5-x1));
}// конец расчёта среднего профиля по оси Y
else
for(size_t j=H/4;j<H-5;++j)// средний профиль по оси Y
{
double c_bin1=0,c_bin2=0;
for(size_t i=5;i<(W-5)+x1;++i)
c_bin1+=(double)(Ltmp(i,j).comp[lyr::r_rgb]+Ltmp(i,j).comp[lyr::g_rgb]+
Ltmp(i,j).comp[lyr::b_rgb])/3.0;
c_bin2+=(double)(Ltmp1(i-x1,j-H/4+5).comp[lyr::r_rgb]+
Ltmp1(i-x1,j-H/4+5).comp[lyr::g_rgb]+Ltmp1(i-x1,j-H/4+5).comp[lyr::b_rgb])/3.0;
}
vbin101.push_back(c_bin1/(double)(W-10+x1));
vbin102.push_back(c_bin2/(double)(W-10+x1));
}// конец расчёта среднего профиля по оси Y
for(size_t x=0;x<vbin101.size()-20;++x)// дифференс
{
double sdifbin10=0;
for(size_t i=x;i<vbin101.size();++i)
sdifbin10+=abs(vbin101[i]-vbin102[i-x]);
sdifbin10/=(double)(vbin101.size()-x);
vdif.push_back(sdifbin10);
vdy.push_back(x+H/4-5);
}// конец расчёта дифференса
vdif_mask.resize(vdif.size(),0);
max=-100;
for(size_t i=3;i<vdif_mask.size()-3;++i)// маска и поиск максимума
{
double t=abs(-vdif[i-3]+vdif[i]*2-vdif[i+3]);
vdif_mask[i]=abs(-vdif[i-3]+vdif[i]*2-vdif[i+3]);
if(t>max)
{
max=t;
vdif_mask[i]=t;
y2=vdy[i];
}
} // конец поиска максимума
size_t sumdif2;
vdeltax.push_back(x2);
vdeltay.push_back(y2);
vpic.push_back(max);
VPan[idx1]->Left=VPan[idx]->Left+x2;
VPan[idx1]->Top=VPan[idx]->Top+y2;
dTop-=VPan[idx1]->Top;
dLeft=VPan[idx1]->Left-dLeft;
for(int i=0;i<xmax;++i)
{
VPan[vrowpart[i]]->Top=VPan[vrowpart[i]]->Top-dTop;
VPan[vrowpart[i]]->Left=VPan[vrowpart[i]]->Left+dLeft;
}
for(int i=xmax+1;i<vrowpart.size();++i)
{
VPan[vrowpart[i]]->Top=VPan[vrowpart[i]]->Top-dTop;
VPan[vrowpart[i]]->Left=VPan[vrowpart[i]]->Left+dLeft;
}
//конец сшивки по кадру
vrowpart.clear();
vrowpart.push_back(ColCount*y_idx+x_idx);
}
}
}
bool check=Vfixed[0];
TDateTime t1=GetTime();
Form1->Caption="Создание панорамных изображений Время работы алгоритма №4 = "+(t1-t);
}
Размещено на Allbest.ru
Подобные документы
Анализ проблем, возникающих при совмещении изображений в корреляционно-экстремальных навигационных системах. Использование двумерного дискретного преобразования Фурье. Нахождение корреляционной функции радиолокационного и моделируемого изображений.
дипломная работа [3,6 M], добавлен 07.07.2012Основные задачи информационной системы "Отель", определение ее аудитории. Создание хранилища для XML-фрагментов. Разработка шаблонов для технической документации, выбор стиля для ее описания. Редактирование фрагментов и формирование выходных документов.
курсовая работа [2,9 M], добавлен 30.12.2013Изучение и программная реализация в среде Matlab методов обработки, анализа, фильтрации, сегментации и улучшения качества рентгеновских медицинских изображений. Цифровые рентгенографические системы. Разработка статически обоснованных алгоритмов.
курсовая работа [4,7 M], добавлен 20.01.2016Исследование вертикальных проекций яркости и размаха яркости. Программная реализация алгоритма автоматического анализа цифровых изображений номерных знаков с целью сегментации цифробуквенных символов. Разработка графического пользовательского интерфейса.
дипломная работа [1,5 M], добавлен 12.04.2013Роль информационно-коммуникационных технологий в совершенствовании образовательного процесса. Структура, содержание и реализация практикума "Подготовка звуковых фрагментов для образовательных ресурсов", методика его использования в учебном процессе.
дипломная работа [2,8 M], добавлен 11.04.2012Сравнительная оценка существующих программ, повышающих разрешение изображений на языке Borland Delphi. Выбор оптимального инструментария для разработки логической схемы. Форма поиска файлов, преобразования изображений и реализации алгоритмов интерполяции.
дипломная работа [3,0 M], добавлен 29.11.2011Методы обработки растровых изображений (кластеризация, пороговая и интерактивная сегментация). Разработка программного модуля для системы мониторинга биосферы и дистанционного зондирования. Создание пользовательского интерфейса программного модуля.
курсовая работа [2,2 M], добавлен 29.04.2015Обработка изображений на современных вычислительных устройствах. Устройство и представление различных форматов изображений. Исследование алгоритмов обработки изображений на базе различных архитектур. Сжатие изображений на основе сверточных нейросетей.
дипломная работа [6,1 M], добавлен 03.06.2022Назначение и специфика программного обеспечения "NordVision". Оценка его качества, надежности, работоспособности и устойчивости. Разработка структуры программы, пользовательского интерфейса и основных алгоритмов. Организация контекстно-зависимой помощи.
дипломная работа [2,5 M], добавлен 24.02.2015Обзор методов создания Web-ресурса для публикации фотопанорамных изображений. Необходимые компоненты для работы сервера. Создание хранилища данных в программной оболочке Denwer. Публикация готовых панорамных изображений на сайте кафедры ИСКМ ВолГУ.
курсовая работа [1,9 M], добавлен 28.08.2012