Function:FocusStack

From CUVI Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Stacks multiple images into a single image. Images need to be aligned.

Function

CuviStatus focusStack(const CuviImage* ImgArr, const int numImages, CuviImage& sharpImage, CuviFilter denoiseFilter, const CuviStream& stream = CuviStream());

Parameters

Name Type Description
ImgArr const CuviImage* Input images array
numImages const int Number of images
sharpImage CuviImage& Resultant image
denoiseFilter CuviFilter Filter to remove noise
stream const CuviStream& GPU stream ID for execution

Image Type Support

Input Output
8uC3 x N 8uC3
16uC3 x N 16uC3

Samples

Error creating thumbnail: Unable to save thumbnail to destination
Input image with foreground focused


Error creating thumbnail: Unable to save thumbnail to destination
Input image with background focused


Error creating thumbnail: Unable to save thumbnail to destination
Focus-Stacked Image


Code Example

std::string path = "D:/dataset/fs/imageFolder/";
std::string result = "D:/dataset/fs/focused.png";


for (const auto& entry : fs::directory_iterator(path))
	{
		if (entry.path().has_extension() && isSupportedExtension(entry.path().extension().string()))
			vec.push_back(entry.path().string());
	}

int numImages = vec.size();
vector<CuviImage> ImgArr(numImages);
//Sort filesnames to read in order. THIS IS VERY IMPORTANT FOR FOCUS STACKING
sort(vec.begin(), vec.end(), lessFirst);

for (int i = 0; i < numImages; i++)
	{
		ImgArr[i].create(vec[i], CUVI_LOAD_IMAGE_COLOR_KEEP_DEPTH);
		cout << vec[i]<< std::endl;
	}


CuviImage focusImage;
CuviFilter denoiseFilter = CuviSpecialFilters::gaussian(CuviSize(11, 11), 15.0f);
cuvi::computerVision::focusStack(ImgArr.data(), numImages, focusImage, denoiseFilter);

printf("\nSaving to disk..");
cuvi::io::saveImage(focusImage, result);