Tuesday, June 16, 2009

Distortion-free 3D steganography!

Most of us think as data-hiding as a communication problem with side-information at the encoder. This widely accepted view has led to dramatic improvements of data-hiding techniques over the years. As a direct consequence, any watermark can be seen as a noise that is added to the host content.

These days, a new trend is emerging in 3D data-hiding. Such data is twofold: there is geometry and there is connectivity. Roughly speaking, geometry is a bunch of 3D Cartesian samples, and connectivity is the way the vertices connect to one another. Some people, including several of the most respected in the mesh processing area (see this paper by Bogomjakov, Gotsman and Isenburg) [1], want to hide information in the way the connectivity is described: since geometry is not affected, it leads to distortion-free data-hiding!

To us, it reads like "communications at no power" and other "infinite capacity channel" odd stories. Frightening. Sounds like a definitive breakthrough in information theory.

But wait!

There is a problem. The real question is whether connectivity should be considered useful to describe 3D data. The answer is not easy. There is already a host of works dealing with 3D point clouds data and how to synthesize connectivity from scratch. But there is more: Isenburg has done extremely interesting works on some sort of a "ghost geometry" that is already present only in the connectivity information (see his connectivity shapes).

Turn again to data-hiding as we know it: with regularly sampled host contents. Those ones that we love and that do not need description, except the dimensions of the image or the duration of the song.

Now let's make the following crazy assumption: each and every pixel of an image is to be numbered and transmitted separately. The decoder now has to know the neighborhood of every pixel. Yes. And we do not transmit triangles anymore (like for 3D meshes), but quads. That's images with explicit connectivity.

And finally we can do the same thing: distortion-free data-hiding for images. Sounds weird uh?

Interestingly enough, the paper by Bogomjakov et al. states that one needs to have a reference ordering of the vertices, so the decoder can catch the difference with the transmitted connectivity and compute the hidden message. Similar ideas are shared with so-called permutation watermarking. Therefore, there is actually some sort of distortion in their scheme. BTW, their scheme also has a capacity!

Why people transmitting images do not send quads with YUV/RGB values being the attribute data? That's because everyone assumes this reference ordering of the pixels inside an image. Everyone is happy with YUV/RGB values only.

And since there is this implicit public reference ordering of the vertices and the decoder can catch the difference, an adversary should be able to detect the hidden information quite easily. Then why is it called steganography?

So let's make it clear once for all: these guys do data-hiding on graphs. They don't do distortion-free 3D steganography. For sure.



[1] Although Gotsman already did some sort of Karhunen-Loeve Transform based compression for 3D meshes... Either it's not as real-time as claimed (one needs the decoder to compute the basis vectors -- cost: several O(N^3) diagonalizations of ~500x500 Laplacian matrices), or it is not compression (one needs to transmit the basis vectors). The improvement presented here suffers from a problem apparented to the Gibbs phenomenon.

1 comment:

  1. Polygon meshes are distributed with the weirdest ordering for the vertex indices. Often they are arranged in whatever order they come out of a hash table, a priority queue, a axis sweep, you name it. Just look at the crazy orderings shown in the "Streaming Meshes" paper. There certainly is no "implicit public reference ordering" and there may not be one for the foreseeable future. Hence ... since one can store indices in any order without arousing suspicion ... i think you can call it steganography for the time being.

    ReplyDelete