Почему я не могу правильно создать фронтальные и сагиттальные срезы из вектора из 256 КТ-изображений с помощью кода C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему я не могу правильно создать фронтальные и сагиттальные срезы из вектора из 256 КТ-изображений с помощью кода C++?

Сообщение Anonymous »

Загрузка 256 срезов поперечного сечения КТ размером 512x512 и размещение их в векторе(256). Теперь я хочу получить коронарные и сагиттальные срезы. Я сделал это:

Код: Выделить всё

// Get coronal section slice
std::vector get_coronal() {
std::vector coronal_section(slice_height, cv::Mat(slice_num, slice_width, CV_16UC1, cv::Scalar(0)));
for (int i = 0; i < slice_height; i++)
{
for (int k = 0; k < slice_num; k++)
{
pixel_array[k].row(i).copyTo(coronal_section[i].row(k));
}
}
return coronal_section;
}

// Get sagittal section slice
std::vector get_sagittal() {
std::vector sagittal_section(slice_width, cv::Mat(slice_height, slice_num, CV_16UC1, cv::Scalar(0)));
for (int j = 0; j < slice_width; j++)
{
for (int k = 0; k < slice_num; k++)
{
pixel_array[k].col(j).copyTo(sagittal_section[j].col(k));
}
}
return sagittal_section;
}

//get transverse section slice
std::vector get_transverse()
{
return pixel_array;
}
Я использовал imshow для отображения поперечной, корональной и сагиттальной плоскостей, но фронтальная и сагиттальная плоскости не могли отображаться должным образом. Я попробовал настроить их векторные типы данных на CV_8UC1, но результаты оказались еще хуже:
[img]https://i .sstatic.net/53sYeotH.png[/img]
.
После изменения двух функций для различной инициализации вектора (256) изображения будут отображается правильно:

Код: Выделить всё

std::vector get_coronal() {
std::vector coronal_section(slice_width);
for (int i = 0; i < slice_width; i++) {
cv::Mat slice(slice_num, slice_height, CV_16UC1);
for (int j = 0; j < slice_num; j++) {
pixel_array[j].row(i).copyTo(slice.row(j));
}
coronal_section[i] = slice;
}
return coronal_section;
}

std::vector get_sagittal() {
std::vector sagittal_section(slice_height);
for (int i = 0; i < slice_height; i++) {
cv::Mat slice(slice_width,slice_num , CV_16UC1);
for (int j = 0; j < slice_num; j++) {
pixel_array[j].col(i).copyTo(slice.col(j));
}
sagittal_section[i] = slice;
}
return sagittal_section;
}
Изображение
Почему два способа инициализации приводят к разным результатам?


Подробнее здесь: https://stackoverflow.com/questions/791 ... ctor-of-25
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»