Re: Per-pixel Object Identifiers?

Florian Kainz <[email protected]> Thu, 14 Apr 2011 17:48:25 -0700
Newsgroups gmane.comp.video.openexr.devel,gmane.comp.video.openexr.user
Message-ID <[email protected]>
Hi Chris,

Unless OpenEXR was modified, object identification with masks would be 
prohibitively expensive for images that contain a large number of objects,
such as an aerial view of a city or a battle scene with thousands of
soldiers and their equipment.

Per-object masks could be implemented if the image allowed a variable number
of data samples per pixel.  An image might contain two channels for object
identification.  One, called objectMask stores a vector of HALFs per pixel;
the other called objectID stores a vector of UINTs per pixel.  objectID[i]
would identify an object, and objectMask[i] would specify how much that
object contributes to the final pixel color.

The scheme I proposed would be equivalent to binary per-object masks,
and it could be implemented in the current version of OpenEXR, which does
not support variable-length per-pixel data.  The scheme would be sufficient
for ILM's use case.

Florian


Chris Cox wrote:
> Per pixel metadata is probably overkill, but some people have specified
> object/surface identification with masks -- using one mask for each surface
> or object.  When querying a pixel for information, you look in the matching
> list of masks for non-zero values and add to the list that should be
> associated with that pixel.
> 
> Chris
> 
> 
> 
> On 4/14/11 3:13 PM, "Florian Kainz" <[email protected]> wrote:
> 
>> Hi,
>>
>> At ILM we want to implement a workflow where a computer graphics artist
>> can bring up an OpenEXR image of, say, a scene from Rango on his or her
>> screen, point to a pixel, and be find out that the object seen at that
>> pixel is called "Beans/dress/button3."
>>
>> This will require storing per-pixel object identifiers in an OpenEXR file.
>> In order to avoid re-inventing the wheel, I would like to find out if any
>> OpenEXR user have done something like this already. If you have done it,
>> would you be willing to share how you did it?
>>
>> Also, is there any interest in per-pixel object identifiers outside ILM?
>>
>> Florian
>>
>>
>> Unless somebody has a better idea, we'll probably do something like this:
>>
>>      Add a channel called objectID, of type UINT, to the image.
>>      If the image has multiple views, then add an objectID channel
>>      to every view.
>>
>>      Add an attribute called objectID to the header.  The type of the
>>      attribute is a map from unsigned integers to lists of strings.
>>      If the image has multiple views, then add multiple attributes
>>      with names of the form <view name>.objectID.
>>
>>      For each unsigned integer value that occurs in one or more pixels
>>      in the objectID channel, a corresponding map entry in the objectID
>>      attribute contains a list of all objects that are visible in those
>>      pixels.  More than one object may be visible in a given pixel because
>>      of transparency, motion blur, reflections, or anti-aliasing.
>>
>>      To find out which object or objects cover a given pixel, application
>>      software first looks up the value stored in the objectID channel for
>>      that pixel, then it looks up the corresponding list of object names
>>      in the objectID attribute.
>>
>>      In images with lots of transparency or motion blur any given object
>>      name may occur multiple times in the map from unsigned integers to
>>      string lists.  In order to save disk space the objectID attribute
>>      could be compressed by using a two-stage lookup, where the attribute
>>      contains two maps, one from pixel values lists of integer object
>>      identifiers, and one from object identifiers to object names.
>>
>>      With 32-bit UINT pixel values this scheme could run out of object
>>      identifiers for images with more than four Gigapixels, but in VFX
>>      production images that large are rare.
>>
>> _______________________________________________
>> Openexr-devel mailing list
>> [email protected]
>> http://lists.nongnu.org/mailman/listinfo/openexr-devel
> 
>