Ad
Ad
Ad
Pages: « 1 2 [3] 4 »   Bottom of Page
Print
Author Topic: D800E and moire - calling all studio shooters  (Read 14092 times)
crames
Full Member
***
Offline Offline

Posts: 210


WWW
« Reply #40 on: November 04, 2012, 11:42:01 AM »
ReplyReply

I am not surprised that 8-lobe lanczos is visually similar to FFT-based scaling.

For linear filtering, there is a relationship between frequency response (wide & flat passband, narrow transition band and lots of attenuation in the stop-band) and ringing. In order to approach a perfect lowpass filter (sin(x)/x), you need to have lots of filter coefficients, some negative and some positive. This means that an image edge will spread out in space and cause undesirable artifacts.

The common (linear) solution to this problem is to either sacrifice passband (blurriness) or stop-band (aliasing). A more advanced solution might be adaptive/non-linear processing.

Did you consider DCT-based scaling rather that FFT-based? I believe that the implicit periodic extension built into DCT might be more suited than the periodicity built into DFT (FFT).

-h

Yes it boils down to, hard transitions in the frequency domain (MTF) cause ripples in the spatial domain, and vice versa. The Lanczos filter smooths the transition from full to zero response, with fewer lobes making for a smoother transition. The FFT filter has hard, straight transitions. The key to controlling ripples is the smoothing of the transitions.

I think the DCT will help if the problem is hard transitions right at the border of the frequency domain. Since in the special case of image zooming the transitions end up farther in and away from the borders, the mirroring effect of the DCT probably won't help.
« Last Edit: November 04, 2012, 11:50:19 AM by crames » Logged

Cliff
LKaven
Sr. Member
****
Offline Offline

Posts: 784


« Reply #41 on: November 04, 2012, 11:22:31 PM »
ReplyReply

Hi Luke,

It's the camera, really, and it does exactly what it was designed for. The proof is in the detail, as shown here (a crop from Simon's image)

[...]

If it were scene detail that is already aliased because of two overlayed screens, then that wouldn't produce single pixel wide lines, and the angle of the single pixel lines would probably not be as horizontal.

Bart, thanks very much for the detailed explanation!

Luke
Logged

hjulenissen
Sr. Member
****
Offline Offline

Posts: 1666


« Reply #42 on: November 05, 2012, 01:15:44 AM »
ReplyReply

Yes it boils down to, hard transitions in the frequency domain (MTF) cause ripples in the spatial domain, and vice versa. The Lanczos filter smooths the transition from full to zero response, with fewer lobes making for a smoother transition. The FFT filter has hard, straight transitions. The key to controlling ripples is the smoothing of the transitions.
Yes, it can be described as a classical filtering problem. For many applications, you can even do the design (and thinking) in 1 dimension, extending that solution into 2d by straight separable processing (see image magick forums for dissenting views)
Quote
I think the DCT will help if the problem is hard transitions right at the border of the frequency domain. Since in the special case of image zooming the transitions end up farther in and away from the borders, the mirroring effect of the DCT probably won't help.
Yes you are right, DCT will only affect the virtual padding outside the known image. If that is not the problem, then the DCT may not be the cure.

I see that the (choice of) demosaic process is being partially blamed for D800E issues. There are some nice papers decribing demosaicing in the spatial frequency domain, as a filtering process to separate luminance and color-difference channels. Did you consider taking the FFT of the raw bayer data, identifying various components and extracting them directly (or using the FFT magnitude as a guide to design an optimal spatial-domain filter)? Joint debayer-scaling might make things more complicated, but may be what is needed for optimal results when the camera lacks pre-filtering (and great care is put into maximizing the amount of recorded details).

E.g.:
http://white.stanford.edu/teach/index.php/A_Review_of_Frequency-selection_Demosaicing_Algorithm_by_Shuang_Liu


-h
« Last Edit: November 05, 2012, 01:18:09 AM by hjulenissen » Logged
crames
Full Member
***
Offline Offline

Posts: 210


WWW
« Reply #43 on: November 05, 2012, 10:55:15 PM »
ReplyReply


I see that the (choice of) demosaic process is being partially blamed for D800E issues. There are some nice papers decribing demosaicing in the spatial frequency domain, as a filtering process to separate luminance and color-difference channels. Did you consider taking the FFT of the raw bayer data, identifying various components and extracting them directly (or using the FFT magnitude as a guide to design an optimal spatial-domain filter)? Joint debayer-scaling might make things more complicated, but may be what is needed for optimal results when the camera lacks pre-filtering (and great care is put into maximizing the amount of recorded details).

E.g.:
http://white.stanford.edu/teach/index.php/A_Review_of_Frequency-selection_Demosaicing_Algorithm_by_Shuang_Liu

-h

Frequency domain demosaicking appears to be a very promising approach.

Here is a presentation and paper by Lian et al., describing their adaptive frequency-domain "AFDemosaick". They also provide Matlab code so that it is possible to actually try it on some raw files. It promises to extract lots of luminance detail while controlling color moire and other artifacts.

It would be interesting to try it on some D800E files...
Logged

Cliff
meierruedi
Jr. Member
**
Offline Offline

Posts: 73


« Reply #44 on: November 06, 2012, 04:17:28 AM »
ReplyReply

Hi griffithimage

As I'm shooting a lot of suits I would never consider the D800e. As you can see I even get moiré with the D800 (shot yesterday). Just to put things into perspective: there's no camera or back I shot that didn't produce moiré in fine fabric....
Logged
hjulenissen
Sr. Member
****
Offline Offline

Posts: 1666


« Reply #45 on: November 06, 2012, 05:28:32 AM »
ReplyReply

Hi griffithimage

As I'm shooting a lot of suits I would never consider the D800e. As you can see I even get moiré with the D800 (shot yesterday). Just to put things into perspective: there's no camera or back I shot that didn't produce moiré in fine fabric....
Perhaps a Foveon-type sensor or a Bayer + multi-shot (as used by one of the MFDB manufacturers) is suited for your use?

I guess that closing the aperture to the point where fine pattern is smeared out is out of the question?

-h
Logged
MichaelEzra
Sr. Member
****
Offline Offline

Posts: 649



WWW
« Reply #46 on: November 06, 2012, 06:24:46 AM »
ReplyReply

Just to put things into perspective: there's no camera or back I shot that didn't produce moiré in fine fabric....
Try to use a consumer lens... well, it cures moire
Logged

meierruedi
Jr. Member
**
Offline Offline

Posts: 73


« Reply #47 on: November 06, 2012, 06:51:39 AM »
ReplyReply

Perhaps a Foveon-type sensor or a Bayer + multi-shot (as used by one of the MFDB manufacturers) is suited for your use?


I guess that closing the aperture to the point where fine pattern is smeared out is out of the question?

-h

Thanks for the hints and tips but multi shot won't work as the suits are always worn by living and therefore moving people. I've been following the Foveon development since the beginning and I was always fascinated by this film-like technology but it's not yet meeting my requirements (high ISO). Hopefully one of the big players will take it further one day!

Fortunately I don't experience moiré every day and when I do it's normally no big deal. I just wanted to point out that it happens with practically all cameras and backs.





Logged
crames
Full Member
***
Offline Offline

Posts: 210


WWW
« Reply #48 on: November 06, 2012, 07:31:39 AM »
ReplyReply

Hi griffithimage

As I'm shooting a lot of suits I would never consider the D800e. As you can see I even get moiré with the D800 (shot yesterday). Just to put things into perspective: there's no camera or back I shot that didn't produce moiré in fine fabric....

It's another case where there is color moire with no luminance aliasing. The green channel is clean. The color moire is coming from detail that is larger than what an AA filter will remove.

It is the demosaicking software that is responsible for preventing color moire. For a D800 with or without the E you would have to go to f36 or so to prevent it entirely in-camera.
Logged

Cliff
NicolasRobidoux
Jr. Member
**
Offline Offline

Posts: 89


« Reply #49 on: November 09, 2012, 10:44:11 AM »
ReplyReply

Quick ImageMagick comments:

Bart: When you use -distort Resize, you do not need to specify -filter Robidoux when you want the Robidoux filter, because it is the universal default. Also, recent ImageMagick assumes sRGB unless there is something indicating otherwise, so you almost never need -set colorspace sRGB. (Things have changed a lot this year.)

I've not done any testing on this test image, and I'm still figuring things out, but I think that if you have issues with moire, you should immediately try resampling in linear light (linear RGB in ImageMagick, which also supports XYZ, although I don't know how accurately). You get linear light by omitting the +sigmoidal-contrast  and -sigmoidal-contrast commands (or setting the contrast to 0, which wastes flops, but indicates that the contrast is a sliding scale which you could use to balance aliasing against ugly over and undershoots).

Also: LanczosRadius would not be my first pick to reduce moire.

I'd use -filter LanczosSharp or the variant recommended at the site you already know: http://www.imagemagick.org/Usage/filter/nicolas (which is already outdated, and suggests, IMHO, too high a contrast value: I think 6.5 is better all around with the Robidoux filter, for example, and going above 7 is probably not "safe" unless you always inspect the results). I'd leave it at the default 3 lobes.

I'm a bit hesitant to make too clear a pronouncement if this does not give you what you want, but maybe you should try Ginseng (if you have an HDRI version of ImageMagick, which my guess is you don't) or the suggested Quadratic Jinc (at the default 3 lobes) or Robidoux if you want even less ringing.

Anyway: I always learn from seeing what people like, so it was interesting to read what you liked.
« Last Edit: November 09, 2012, 11:03:33 AM by NicolasRobidoux » Logged
NicolasRobidoux
Jr. Member
**
Offline Offline

Posts: 89


« Reply #50 on: November 09, 2012, 11:00:15 AM »
ReplyReply

Also, I'm generally not a fan of filters with more than 3 lobes, but I'd also try

convert {input} -colorspace RGB -filter LanczosRadius -define filter:lobes=5 -distort Resize 200% -colorspace sRGB {output}

for which LanczosRadius happens to give just about the right deblur (.95 or so) if I remember correctly.

(I have not been impressed with Jinc-windowed Jinc 4 lobes, which is why I jump from 3 to 5.)

Note that my comments have to do with resizing. They don't address the issue of moire that's already there.
« Last Edit: November 09, 2012, 11:53:52 AM by NicolasRobidoux » Logged
NicolasRobidoux
Jr. Member
**
Offline Offline

Posts: 89


« Reply #51 on: November 09, 2012, 11:21:32 AM »
ReplyReply

The Harper_window test picture is awesome!
Logged
BartvanderWolf
Sr. Member
****
Online Online

Posts: 3401


« Reply #52 on: November 09, 2012, 11:49:15 AM »
ReplyReply

Quick ImageMagick comments:

Bart: When you use -distort Resize, you do not need to specify -filter Robidoux when you want the Robidoux filter, because it is the universal default. Also, recent ImageMagick assumes sRGB unless there is something indicating otherwise, so you almost never need -set colorspace sRGB. (Things have changed a lot in the last year.)

Hi Nicolas,

Thanks for chiming in here on LuLa, much appreciated.

It's exactly because of the 'relatively recent' changes that I precautiously overspecify some settings, just to make sure that when the suggestions are tried with later versions there is a better chance of them producing the expected results. The suggested commands are examples that can be compacted a bit, I know.

Quote
I've not done any testing on this test image, and I'm still figuring things out, but I think that if you have issues with moire, you should immediately try resampling in linear light (linear RGB in ImageMagick, which also supports XYZ, although I don't know how accurately). You get get linear light by omitting the +sigmoidal-contrast  and -sigmoidal-contrast commands (or setting the contrast to 0, which wastes flops, but indicates that the contrast is a sliding scale which you could use to balance aliasing against ugly over and undershoots).

Yes, makes sense, but then I never promised the ultimate solution to this specific trade-off scenario Wink, just a possible direction. I'm not convinced yet that there is a universal solution other than upsampling in Fourier space with proper precautions to avoid ringing artifacts as much as possible (which may proof difficult when one is restricted to a sample from an infinitely repeating pattern).

Quote
Also: LanczosRadius would not be my first pick to reduce moire.

Lanczos windowed Sinc is not my first choice for upsampling either, but I attempted to mimick the behavior of Fourier upsampling by means of simple canvas expansion.

Quote
I'd use -filter LanczosSharp or the variant recommended at the site you already know: http://www.imagemagick.org/Usage/filter/nicolas (which is already outdated, and suggests, IMHO, too high a contrast value: I think 6.5 is better all around with the Robidoux filter, for example, and going above 7 is probably not "safe" unless you always inspect the results). I'd leave it at the default 3 lobes.

Thanks for your thoughts, I'll also continue experimenting and reading what comes up at the IM discourse server.

Quote
I'm a bit hesitant to make too clear a pronouncement if this does not give you what you want, but maybe you should try Ginseng (if you have an HDRI version of ImageMagick, which my guess is you don't) or the suggested Quadratic Jinc (at the default 3 lobes) or Robidoux if you want even less ringing.

Unfortunately, AFAIK, there are no compiled HDR binary distributions available at the ImageMagick website. When I make suggestions to others, I attempt to do so with links to sources that allow other to repeat the experiments that I mention. It's a pity, because the HDR enabled code allows higher accuracy calculations which takes another uncertainty out of the experiments.

Quote
Anyway: I always learn from seeing what people like, so it was interesting to read what you liked.

I've been promoting ImageMagick for downsampling (could use an update with newer IM version, I know) since a long time ago, from my background as a photographer. Upsampling is another one of my fields of attention for potential improvements, and you might e.g. be interested in this discussion as well. Improved sharpening (which is inevitable in discrete image processing) is yet another one of my attempts to lift image quality to the next level, even with existing tools that don't help our inexact vision enough.

Anyway, thanks for your helpful comments and contributions (here and elsewhere). Especially for photographic images I value the benefits of cylindrical interpolation over 2 tensor methods because I've always wondered how to get rid of jagged edges without creating too many other drawbacks. Processing power increases in recent years should keep the cost of more calulation intensive procedures from becoming obstacles.

Cheers,
Bart
« Last Edit: November 09, 2012, 11:55:23 AM by BartvanderWolf » Logged
NicolasRobidoux
Jr. Member
**
Offline Offline

Posts: 89


« Reply #53 on: November 09, 2012, 12:11:51 PM »
ReplyReply

I do hear that getting HDRI ImageMagick running directly in Windows is a PITA.
Logged
HarperPhotos
Sr. Member
****
Offline Offline

Posts: 1235



WWW
« Reply #54 on: November 09, 2012, 03:41:44 PM »
ReplyReply

Hello,

Back in the early days when I got my Leaf Aptus 75 I came up against colour moiré.

I bought a number of filters from Caprock and they elevated the problem greatly. You do have to do more sharpening but its a lot easier than trying to remove colour moiré.

http://www.caprockdev.com/antimoire.htm

Cheers

Simon
Logged

Simon Harper
Harper Photographics Ltd
http://www.harperphoto.com
http://www.facebook.com/harper.photographics

Auckland, New Zealand
NicolasRobidoux
Jr. Member
**
Offline Offline

Posts: 89


« Reply #55 on: November 09, 2012, 07:34:38 PM »
ReplyReply

Bart:

This really is a current favorite? (I'm not arguing: I just find it really really hard to sort out what's better from what's good, and I've programmed so many different schemes with strengths and weaknesses so I have a lot to sort through. This being said, my two very similar variants of EWA LanczosSharp with 3 lobe are winners in my book. And EWA Robidoux has been liked by a variety of people, even though I'm more than a bit iffy about this method. The big surprise is you liking high contrast sigmoidization really surprises me a lot.)

Would you be kind enough to explain what you compared it too, what you saw as good, and what you saw as bad? Here or elsewhere? And email me the link (nicolas.robidoux@gmail.com)?

I'm interested in knowing your favorite(s). I'm not specifically asking because this filter has my name. If you'd rather discuss another filter (I read that you like -distort Resize with the Mitchell filter, for example), I'm still thankful. I'm trying to figure out what to recommend. And what to program into the new GEGLized GIMP when I've put enough money in the bank to afford more pro bono work.
Quote
For less specific images that require 'artifact free' upsampling, I get very good upsampling results with the following batch file entry:
Code:

convert %1 -set colorspace sRGB -colorspace RGB +sigmoidal-contrast 12.09375 -filter Robidoux -distort Resize 200%% -sigmoidal-contrast 12.09375 -colorspace sRGB -compress None "%~dpn1_200pct-CSpc+sigmoid.tif"

It can also do good downsampling, in this example to an uncompressed TIF format, with modified resize percentages below 100%.
« Last Edit: November 09, 2012, 07:47:30 PM by NicolasRobidoux » Logged
NicolasRobidoux
Jr. Member
**
Offline Offline

Posts: 89


« Reply #56 on: November 10, 2012, 04:03:32 PM »
ReplyReply

Bart:
Now I understand better what you were doing.
I agree that -filter LanczosRadius -define filter:lobes=8 -distort Resize is a reasonable low pass filter that would emulate FFT processing reasonably well.
Let me suggest something, without really knowing how well it will work. This being said, you probably know most of this already.
If you specify a filter (with a recent version of ImageMagick), the short circuit that bypasses the filtering when resizing at exactly the same size will not be turned on.
So, for example

Code:
convert Harper_window_crop.jpg -colorspace RGB -filter Jinc -define filter:window=Box -define filter:lobes=8 -distort Resize 100% -colorspace sRGB Jinc8.png

applies a "raw" Jinc-windowed Jinc 8-lobe filter with cutoff frequency matching the Sinc's, to the image without resizing, and

Code:
convert Harper_window_crop.jpg -colorspace RGB -filter Jinc -define filter:window=Box -define filter:lobes=8 -define filter:blur=2 -distort Resize 100% -colorspace sRGB Jinc8blur2.png

will apply a similar filter, except that the cutoff frequency is half the corresponding Sinc's.

You can play with blurs that are given by floating point numbers (e.g. blur=1.414213562373). Also, if you want Jinc-windowed Jinc, all you have to do is

Code:
convert Harper_window_crop.jpg -colorspace RGB -filter Lanczos -define filter:lobes=8 -distort Resize 100% -colorspace sRGB JincJinc8.png

Also: When the number of lobes is large, LanczosRadius is pretty much the same as Lanczos. And you can replace RGB by XYZ. I think recent versions of IM do XYZ pretty cleanly. But it should not make much of a difference, because there basically is not truncation error when using -distort Resize, and the correspondence between RGB and XYZ is affine (I believe), and we are applying a linear filter (and I'm using an HDRI, that is, floating point, version of IM).

I'd give a shot to Lab, why not? And actually, I'd consider processing the Y channel of XYZ differently than the X and Z ones (use a less blurred version).

-----

I gave a quick try to the above, and the results are underwhelming. But I figured I'd pass the idea along.
« Last Edit: November 10, 2012, 06:30:03 PM by NicolasRobidoux » Logged
BartvanderWolf
Sr. Member
****
Online Online

Posts: 3401


« Reply #57 on: November 10, 2012, 08:46:27 PM »
ReplyReply

Bart:

This really is a current favorite? (I'm not arguing: I just find it really really hard to sort out what's better from what's good, and I've programmed so many different schemes with strengths and weaknesses so I have a lot to sort through. This being said, my two very similar variants of EWA LanczosSharp with 3 lobe are winners in my book. And EWA Robidoux has been liked by a variety of people, even though I'm more than a bit iffy about this method. The big surprise is you liking high contrast sigmoidization really surprises me a lot.)

Hi Nicolas,

Actually, I think it's a sigmodization value I took from one of your earlier posts on the IM discourse server, and it also helped to ameliorate (what I've become to think is) a bug in the EWA '-distort Resize' algorithm. I've also noted that you currently suggest using lower values, which I might agree with, if not for 'masking' this (assumed by me) bug. When I resize this file to 200%, I get a different/incorrect resampling for odd/even horizontal lines of the edge ... My conclusion stems from my research of sharpening mentioned earlier, and has existed for some time already in various versions of IM (so I'm starting to conclude it's not accidental but inherently a systematic flaw, until fixed). I know you are not to blame, I'm just giving some feedback (which probably should be given to Anthony Thyssen (or others) of IM instead).

Quote
Would you be kind enough to explain what you compared it too, what you saw as good, and what you saw as bad? Here or elsewhere? And email me the link (nicolas.robidoux@gmail.com)?

No problem, if things get a bit too much mathematically involved for a Photography forum I will, although some of the members (some are involved with sensor design, or Astronomical digital signal processing, at an academic level, like yourself) are quite capable of adding their informed views (some even beyond my capabilities, I'm not a scholar). We might take this exchange of ideas to a new thread, if desired by the OP or others.

Quote
I'm interested in knowing your favorite(s). I'm not specifically asking because this filter has my name. If you'd rather discuss another filter (I read that you like -distort Resize with the Mitchell filter, for example), I'm still thankful. I'm trying to figure out what to recommend. And what to program into the new GEGLized GIMP when I've put enough money in the bank to afford more pro bono work.

Great, for the advance of imaging technology. My personal preference, if only for the sake of controlability, is to separate the upsampling (or down-sampling for that matter) and its by-products from sharpening (which (additionally) is inevitable after (re-)sampling, IMHO).

My humble research has shown that the cascaded blur (residual lens design aberrations plus diffraction, combined with the sensor element aperture, and often an optical low-pass filter, or OLPF) of optics (like in regular photographic images) looks quite similar to a Gaussian distributed blur. That also suggests that (re-sampling + additional) deconvolution is a better approach than relying on the edge-contrast enhancing by-products of image re-sampling (which also varies with local contrast).

Cheers,
Bart
Logged
NicolasRobidoux
Jr. Member
**
Offline Offline

Posts: 89


« Reply #58 on: November 10, 2012, 09:09:46 PM »
ReplyReply

...this (assumed by me) bug. When I resize this file to 200%, I get a different/incorrect resampling for odd/even horizontal lines of the edge ... My conclusion stems from my research of sharpening mentioned earlier, and has existed for some time already in various versions of IM (so I'm starting to conclude it's not accidental but inherently a systematic flaw, until fixed). I know you are not to blame, I'm just giving some feedback (which probably should be given to Anthony Thyssen (or others) of IM instead)...
When you have a minute, can you be a bit more specific w.r.t. what you expect to see/measure? It certainly does not jump at me.
It's only with -distort Resize, and not -resize?
P.S. This being said, if you use a filter with negative lobes in such a way that over and undershoot are clipped in a different way for the two values that are on the two sides of the interface, you will break the symmetry of the interface. In this case, sigmoidization may help because it limits over and undershoots (in a way that is symmetrical w.r.t. exchanging black and white).
« Last Edit: November 10, 2012, 09:15:30 PM by NicolasRobidoux » Logged
BartvanderWolf
Sr. Member
****
Online Online

Posts: 3401


« Reply #59 on: November 11, 2012, 08:53:52 AM »
ReplyReply

When you have a minute, can you be a bit more specific w.r.t. what you expect to see/measure? It certainly does not jump at me.
It's only with -distort Resize, and not -resize?
P.S. This being said, if you use a filter with negative lobes in such a way that over and undershoot are clipped in a different way for the two values that are on the two sides of the interface, you will break the symmetry of the interface. In this case, sigmoidization may help because it limits over and undershoots (in a way that is symmetrical w.r.t. exchanging black and white).

Hi Nicolas,

It took me a bit of time, but I think I have found the issue, and it is not a real bug but a side effect of the linear gamma upsampling.

Downsampling in linear gamma space has some very useful properties, which makes it the recommended practice for me. However, with upsampling it has an IMO nasty side-effect of exaggerating edge sharpness in an ugly way. I say nasty because we have no control over it, unlike post resampling sharpening.

When you look at the attached zoomed-in crops of a 200% EWA upsample, no. 1 is a Linear gamma upsample without sigmoid contrast adjustment, and no. 2 is the same but with a sigmoid contrast of 10. The no. 1 edge looks like it is a dashed line, fading from sharp to fuzzy, it no longer looks like a continuous edge. With the very high sigmoid contrast adjustment added the result is much better controlled, although it would probably be less effective in Simon Harper's image.

To demonstrate that the dashed line upsampling issue I saw is caused by the Linear gamma colorspace, I've added a third crop, like no. 1 without a sigmoid contrast, but also without the linear gamma conversion during the resampling.

Therefore, if we want to maintain the benefits of linear gamma interpolation also for upsampling (although the benefits are larger for downsampling), we can reduce the potentially ugly edge sharpening artifacts by additionally using higher sigmoid contrast adjustments. On the other hand, when we want to reduce the risk of running into issues with limited bit depth images being converted into linear gamma and back, we might as well (QED !) skip the gamma and sigmoid conversions and just use (deconvolution) sharpening to control the edge sharpness.

The benefits of linear gamma interpolation, such as more accurate color transitions, are of course another consideration. But it is good to know that we can then control the severity of the dashed edge effect with the sigmoidal contrast parameter.

Cheers,
Bart
Logged
Pages: « 1 2 [3] 4 »   Top of Page
Print
Jump to:  

Ad
Ad
Ad