Idea - Ansel Adams metering

Started by Andy600, September 15, 2013, 05:40:57 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Andy600

Just throwing another idea out there for the devs.

We have some fantastic exposure aids in Magic Lantern and IF you know ire values and can read vectorscopes etc you can achieve great results but I have an idea for a more simplified metering system (maybe a new module) based on the Ansel Adams zone system http://en.wikipedia.org/wiki/Zone_System.

The basic idea is for something akin to zebras and false color metering but where a chosen zone (i.e. skin in zones 5 - 7) would pass through while everything outside is blacked out. Each zone (or a selected range of zones) could be selected for different exposure purposes. This would be a very fast way of setting exposure, especially for skin tones because skin would not be seen until it comes within correct exposure.

Ok, this is nothing new and of course, shooting raw lets you do most of the work in post but as the cameras are pretty much in the 10-stop range that the AA zone system uses it kind of makes sense to use it. It is, after all, a very widely used and respected system.

Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

Audionut

Spot meter.

Pale skin tones should be around -3EV.  Middle grey is -4EV.

Andy600

Quote from: Audionut on September 15, 2013, 05:49:00 PM
Spot meter.

Pale skin tones should be around -3EV.  Middle grey is -4EV.

I know. This is going a stage further. Think of it like a qualifier in Resolve.
Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

a1ex

Um... just set zebra to larger thresholds?

Andy600

Quote from: a1ex on September 15, 2013, 06:19:15 PM
Um... just set zebra to larger thresholds?

Yeah, I guess that would work but I was thinking more about having predefined zones where everything in the zone (or range of zones) was visible and everything outside was black. You can of course use the zone system with current ML metering if you know the system but I have a feeling that having a defined AA system would be a popular alternative and maybe even a good educational tool as the zones could indicate ire/EV etc.

For me personally I can work with what we already have but thought the idea might be a useful addition.
Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

a1ex

I still don't get how it would be different from zebras; can you do a mock-up?

Andy600

Quote from: a1ex on September 15, 2013, 08:19:16 PM
I still don't get how it would be different from zebras; can you do a mock-up?

I'll have a go.

The difference would be in having selectable zones that stick to the AAZS naming convention i.e. you select say zone VI (average Caucasian skin) and everything within that range would be visible with everything outside of it blacked out.

For instance, if you haven't exposed correctly for skin a face would be blacked out or would appear blotchy (if it's borderline over or under-exposed).

Switching the AA metering on/off and also displaying ire/EV etc will show someone who is not used to setting manual exposure exactly what a correctly exposed image looks like and will enable them to understand exposure zones, stops and more importantly learn important ire/EV values.

Even when shooting raw it's typical to over or underexpose skin tones (within the context of a 10-11 stop sensor) unless you specifically meter for them or use more advanced techniques such as dual ISO. I've noticed a few videos recently where raw video has been very under-exposed to preserve extreme highlight information at the expense of more important detail such as skin. I still think there is a lot to be said about getting correct skintone exposure as skin is typically one of the most noticeable and un-natural looking things when it's exposed badly.

I do think most users who are familiar with ML metering will probably continue to use what is currently available but there is a learning curve to understanding spot-metering, vectorscopes and zebras and this idea would probably help that learning process.

I'll try and mock-up in photoshop.
Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

Andy600

Ok, a basic mock-up.

You would select a zone or zone range - each zone would have a short description as per the AA zone system


Img1 - Zone VI selected - skin exposed correctly




Img2 - still with Zone VI selected - Skin over exposed so user would need to adjust exposure




In these images, everything outside the range appears white but could add option for black.

It is similar to Zebras but with 1-stop preset ranges.

You choose whichever area of your composition is most important to the image then select it's relevant AA Exposure Zone using the dial and then adjust exposure accordingly until your chosen area is fully visible within the zone.

There could also be an info overlay with more exposure details for learning purposes and a quick on/off button.

Zone ranges (i.e. zone's V - VII) could also be selected using another wheel or cursor, similar to bracketing.

This would only be for setting exposure before recording.

p.s. I copied the zone diagram from Wiki. It would be more logical upside down - white to black
Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

a1ex

You can try playing with this function: zebra_highlight_raw_advanced
https://bitbucket.org/hudson/magic-lantern/commits/915d2c62f90c

Example:
https://bitbucket.org/hudson/magic-lantern/commits/c6a4f7be779c

It's very powerful, you can highlight pretty much any combination of zones, color channels, with different type of hatch patterns... only that it's a little slow.

You can start with something like this:


    zebra_highlight_raw_advanced(
        (struct raw_highlight_info [])
        {
            {
                .raw_level_lo = 0,
                .raw_level_hi = ev_to_raw(-8),
                .color = COLOR_BLACK,
                .fill_type = ZEBRA_FILL_SOLID,
                .gray_projection = GRAY_PROJECTION_MAX_RGB,
            },
            {
                .raw_level_lo = ev_to_raw(-8),
                .raw_level_hi = ev_to_raw(-5),
                .color = COLOR_BLUE,
                .fill_type = ZEBRA_FILL_50_PERCENT,
                .gray_projection = GRAY_PROJECTION_MAX_RGB,
            },
            {
                .raw_level_lo = ev_to_raw(-5),
                .raw_level_hi = ev_to_raw(-4),
                .color = COLOR_CYAN,
                .fill_type = ZEBRA_FILL_50_PERCENT,
                .gray_projection = GRAY_PROJECTION_MAX_RGB,
            },
            {
                .raw_level_lo = ev_to_raw(-4),
                .raw_level_hi = ev_to_raw(-3),
                .color = COLOR_GREEN1,
                .fill_type = ZEBRA_FILL_50_PERCENT,
                .gray_projection = GRAY_PROJECTION_MAX_RGB,
            },
            {
                .raw_level_lo = ev_to_raw(-3),
                .raw_level_hi = ev_to_raw(-2),
                .color = COLOR_YELLOW,
                .fill_type = ZEBRA_FILL_50_PERCENT,
                .gray_projection = GRAY_PROJECTION_MAX_RGB,
            },
            {
                .raw_level_lo = ev_to_raw(-2),
                .raw_level_hi = ev_to_raw(-1),
                .color = COLOR_ORANGE,
                .fill_type = ZEBRA_FILL_50_PERCENT,
                .gray_projection = GRAY_PROJECTION_MAX_RGB,
            },
            {
                .raw_level_lo = ev_to_raw(-1),
                .raw_level_hi = ev_to_raw(-0.1),
                .color = COLOR_RED,
                .fill_type = ZEBRA_FILL_50_PERCENT,
                .gray_projection = GRAY_PROJECTION_MAX_RGB,
            },
            {
                .raw_level_lo = ev_to_raw(-0.1),
                .raw_level_hi = 16384,
                .color = COLOR_RED,
                .fill_type = ZEBRA_FILL_SOLID,
                .gray_projection = GRAY_PROJECTION_MAX_RGB,
            },
            RAW_HIGHLIGHT_END
        }
    );


(call it from draw_livev_for_playback so it appears on still photos)

Andy600

Thank you very much A1ex  8)

I can understand some of the Zebra function you committed to Bitbucket and also the zebra highlight code here. It actually looks like a good project for someone like me to learn on. My code knowledge/skill is very limited but I'm gonna have a play.

Big thanks for your help! :)
Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

Sc0Bee

Quote from: Andy600 on September 15, 2013, 11:01:52 PM
Ok, a basic mock-up.

You would select a zone or zone range - each zone would have a short description as per the AA zone system

Img1 - Zone VI selected - skin exposed correctly



...

I think this is an excellent idea.  As an old fart who learned the zone system in my youth, seeing the above mockup really rang my bell.

@Andy600, I'd be glad to help in some way if I can.  I got an environment set up last night and ran a successful build - but my programming skills pretty limited as well.  But I do have a lot of time on my hands (I'm retired), so maybe I can figure a way to contribute.

PM me or post to this thread if you make any headway...

Canon 500D, 7D | Lightroom 5 | Photoshop CS5 | Premiere Pro CS4 | After Effects CS4

Andy600

Thanks Sc0Bee :)

I'm sure A1ex and co are swamped with work so maybe us novice coders can practice on a defined project like this where the functions have already been implemented.

I have very limited knowledge but I'm going to try and at least make 1-stop selectable Zebra zones using A1ex's code. If I can get that working I will then 'try' to build a module but not sure if that would conflict with the main implementation of Zebras in ML?

Feel free to contribute. The more of us that get involved, the quicker this can (potentially) get done and we can learn together :)




p.s. users shouldn't expect anything soon. I personally have a lot learn

Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

fpena06


a1ex

It will conflict with zebras in the same way as false colors conflict with zebras.

Maybe the module system could benefit from an interface that allows custom overlays. The tricky point here is that order matters (e.g. cropmarks must be on top, spotmeter is usually on top of zebras and so on). Most of the overlays only paint on empty areas, and this trick avoids many problems.

In LiveView, some of them have different refresh rates (e.g. peaking must be close to realtime, magic zoom *must* be realtime, zebras... no big deal if they are a little slow, spotmeter updates once per second, histogram is more like an idle task that updates whenever it finds CPU time).

With the current callback interface, we could define something like CBR_CUSTOM_OVERLAY, but there's no way to know in which order they will be called (I think they are called in alphabetical order, but I'm not 100% sure).

Andy600

a1ex - would it be easier (or possible) to simply disable all conflicting functions with regards to this specific module. I can see that this module would be useful for basically setting exposure according to the AA system and for checking previously shot photos so it doesn't need to be fast or used while shooting. i.e. you would meter exposure with it then exit before shooting.

I think I'm understanding this correctly so if you do go with CBR_CUSTOM_OVERLAY could there not be a priority setting for modules with conflict warnings? if you can discover the order in which they are called.
Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

a1ex

Right now there's no interface that handles such conflicts (just some hardcoded checks like in defishing vs anamorphic). But if you don't enable two conflicting functions from menu, it should work just fine.

Andy600

Quote from: a1ex on September 16, 2013, 07:35:09 PM
Right now there's no interface that handles such conflicts (just some hardcoded checks like in defishing vs anamorphic). But if you don't enable two conflicting functions from menu, it should work just fine.

Ok, got it :)

So basically a user warning to NOT enable whatever conflicts with this module would be easier to do ATM.
Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

shortandangry

Taking this a bit further, you could also add an "auto exposure" for the selected tone. So once you select the zone, it looks for the highest contrast.  Also, if this is used for skin tones exclusively, there could be a detail reduction for the selected skin tone. JVC already has this. Forgive me is this is already a feature.

Andy600

I don't want detail reduction in anything. You can smooth skin in post if required.

Auto exposure for a zone might involve some difficult math but maybe something to look at.

I'm thinking initially what to do about the outermost zones as we're dealing with a linear sensor that has an abrupt cut-off so maybe restrict the zone metering to 'dynamic' or 'textural' ranges as documented in the Wiki article. I guess these could be selectable.

The module doesn't even exist yet :) The first job is to play with a1ex's advanced Zebra code and fully understand it.
Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

chmee

@Andy600 just a short question.. does make the zonesystem sense on color-pictures?
[size=2]phreekz * blog * twitter[/size]

a1ex

The same question applies to ETTR.

Answer: the gray_projection parameter.

For more info, look it up in enfuse docs:

http://enblend.sourceforge.net/enfuse.doc/enfuse_4.0.0.xhtml/Expert-Options.xhtml
--gray-projector=PROJECTOR

Andy600

Quote from: chmee on September 16, 2013, 09:03:07 PM
@Andy600 just a short question.. does make the zonesystem sense on color-pictures?

Yes. It was developed originally for Black & White but is also relevant to colour and digital photography. The Wiki article has more links to articles that explore how and why. The zone system is for setting optimal exposure for whatever the photographer chooses as most important in a composition. As for how this will work in practice with Magic Lantern, I have no idea but it's a fun project ;)
Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

Andy600

I have to admit my limited coding knowledge is even more limited than I thought and I'm getting nowhere fast with this :(

I've tried a1ex's suggestions and played around with ettr zone highlighting (and can see the results) but making this into a module with selectable zones etc is pretty complicated without studying and properly understanding module structure, dependencies etc.

Anyone else having any success?
Colorist working with Davinci Resolve, Baselight, Nuke, After Effects & Premier Pro. Occasional Sunday afternoon DOP. Developer of Cinelog-C Colorspace Management and LUTs - www.cinelogdcp.com

Audionut

I had a quick play around with this today.  Some observations from a useability standpoint.

Applying white (or whatever color) either side of the wanted zone didn't seem overly helpful except for "this is in the zone and everything else isn't".  There was no way to determine which way to expose if you wanted to bring other areas into that specific zone. 
I tried black for under and white for over which seemed better.  And I think I preferred ZEBRA_FILL_SOLID rather then ZEBRA_FILL_50_PERCENT.
Also not sure if it's better to weak zebra the zone or strong zebra everything but the zone of interest.

Using different colors for different zones (simultaneously) was messy at best.  New users are bound to go, "wtf"!

Highlight control.  I like some form of highlight observation even if my end goal is correct exposure of skin tones.  I tried some red zebras on over exposure but didn't get enough time to really test it.  Should we be worried about this when this is clearly targeting specific zones only?

a1ex, what are the chances of getting LV/QR to switch back and forth between regular zebras and zone overlay?  No user toggle required, just automatic switching between the different overlays.  This way I don't think there would be any need to consider the other areas of exposure except for the specific zone, as the display would toggle to regular zebras showing over/under exposure.


Thoughts/ideas/suggestions?