Boyko Perfanov
Boyko Perfanov

Reputation: 3047

Multiple scans by key

I have one 4-channel HSVL image - Hue, Saturation, Value (floats), Label (unsigned int). The task is to compute an array of sums of Hues, Saturations, and Values, for each unique label. For example, I will be able to access the output Sum[of pixels with label 455] = { Hue: 500, Sat: 100, Val: 200 }. The size of the image is about 5 MP, and there are about 3000 different labels.

My idea is to have ~32 scans over parts of the image, that will produce 32 x nLabels sums. Then I can scan over the 32 partitions of the image, to arrive at nLabel sum structures.

Does a "scan by key?" algorithm exist that is a solution to this exact type of problem?

Upvotes: 0

Views: 104

Answers (1)

kangshiyin
kangshiyin

Reputation: 9779

If you want to do this by CUDA, the following could help.

Since you only need the sum values, I think what you need is "reduce by key". Thrust provides an implementation thrust::reduce_by_key() which could meet your needs.

But before using it, you have to sort all the pixels by the labels. This can be done with thrust::sort_by_key()

You may also be interested in thrust::zip_iterator, which can zip the 3 channels HSV into a single value iterator for sorting and reduction.

Upvotes: 3

Related Questions