VideoHelp Forum
+ Reply to Thread
Results 1 to 14 of 14
Thread
  1. Member
    Join Date
    Nov 2017
    Location
    North Carolina
    Search PM
    I have a video from my car wash from a person who dumped a truck load of carpet in one of my bays. I have tried to send it to an online video forensics place with no luck of reading the plate.....I have tried myself using video cleaner and can come so close, but still no luck..... any help would be greatly appreciated for what software, or how to better use video cleaner.. Thanks in advance
    Quote Quote  
  2. Member
    Join Date
    Mar 2008
    Location
    United States
    Search Comp PM
    Upload the source clip to this thread using the Upload files/attachment button
    Quote Quote  
  3. Dinosaur Supervisor KarMa's Avatar
    Join Date
    Jul 2015
    Location
    US
    Search Comp PM
    Seems like this camera was using some kind of high amplification of the image for night time recording, and so the tail lights on the truck reflected off the license plate. Causing the entire plate to just be clipped at white due to the plate being over exposed in the video. What I mean is that it looks like any detail on the license plate was just recorded as white or nearly white. As the plate is registering mostly as one color, clipped white, there is no real hope in "enhancing" it.

    If you don't know already, it's a 2013 or later Silverado. I can't really guess the color but I would guess it's at the darker end. So if you know someone who hates you with that car, you might be on to something.
    Quote Quote  
  4. Member
    Join Date
    Nov 2017
    Location
    North Carolina
    Search PM
    When I used Video Cleaner and went to frame 3586, I can almost make out the letters...... you can see all the letters/numbers individually but just cant quite make them out
    Quote Quote  
  5. Member
    Join Date
    Aug 2010
    Location
    San Francisco, California
    Search PM
    Two things working against you are the overexposure and frame blur. So for the future: position the camera where it can see the plate of a stopped vehicle and set the exposure to avoid clipping.
    Quote Quote  
  6. Member Bernix's Avatar
    Join Date
    Apr 2016
    Location
    Europe
    Search Comp PM
    Hi,
    there is no hope in this video. Maybe is better to use some graphic program f.e. free (gimp, krita), instead of video editors. You can get 32 bit float per channel precision. And filters, that are useless for video editors because they are too slow and costs too much of time.
    But in this particular video I don't see much to restore. As mentioned at the start of the of this post.

    Bernix
    Quote Quote  
  7. Member
    Join Date
    Nov 2017
    Location
    North Carolina
    Search PM
    https://files.videohelp.com/u/273060/Car_Wash_Trash_License_October_8th.tif

    I thought I this pic I could almost make out some of the lettering..... first digit is either a Z or a 2

    how would I set the video to avoid clipping? JVRaines

    Quote Quote  
  8. Member
    Join Date
    Aug 2010
    Location
    San Francisco, California
    Search PM
    With manual exposure control. If you're using a camera with only automatic exposure, then you're stuck.
    Quote Quote  
  9. You can fool an automatic exposure camera into reducing the exposure by mounting a small flashlight nearby and shining it at the corner of the image, somewhere where nothing important is likely to happen. You then park a car where you need to read the license plate and adjust the light output of the flashlight until you can read the license plate. It is a kludge, but it could work.
    Quote Quote  
  10. Member Cornucopia's Avatar
    Join Date
    Oct 2001
    Location
    Deep in the Heart of Texas
    Search PM
    Stuff like this needs bracketed HDR capability.

    Scott
    Last edited by Cornucopia; 5th Nov 2017 at 21:21.
    Quote Quote  
  11. First, upconvert to 16 bits. Then you can go wild with levels manipulation without banding issues.
    (turns out I didn't need this in the end)

    I inverted, then increased gamma, then re-inverted. This was to get max contrast boost around the highlights.

    Then, once the luma range was as good as I could get it, I played around with hi-pass "sharpening" (actually local contrast boost).

    Using Animate lets you vary a filter parameter as you jog the clip backward and forward.
    In this case I varied hi-pass radius. Different small features are brought out at different radii. Try it.

    Requires AvisynthPlus
    Code:
    ImageSource("Car_Wash_Trash_License_October_8th.tif")
    Crop(0, 160, 300, 360)
    ConvertBits(16)
    ConvertToYUV420
    
    ColorYUV(cont_y=f2c(255.0/219.0), off_y=-16)
    Invert.ColorYUV(gamma_y=f2c(5.0)).Invert
    ColorYUV(gain_y=f2c(1.7))
    ColorYUV(cont_y=f2c(1.3))
    
    BilinearResize(Width*2, Height*2)
    
    ## hi-pass filter; use /Animate/ to find best radius 
    Animate(0, 256, "SimpleSharp",
    \ 0.05, 5.0).Trim(0, 257)
    
    ConvertBits(8, dither=0) ## 0=ON, -1=OFF
    #Histogram
    return Last
    
    #######################################
    function SimpleSharp(clip C, float rad)
    {
        return C.UUHipassSharpen(rad=rad, gain=3.0, opacity=1.0)
        #\ .Subtitle("rad="+String(rad, 2), align=5) 
    }
    
    ##################################
    ### highpass filter "sharpening" (actually local contrast boost)
    ##
    ## @ rad     - highpass radius (range 0.0-; default 2.0)
    ## @ gain    - highpass contrast boost (1.0=unity; range=0.1-10.0; default=1.5)
    ## @ opacity - blend strength (range=0.0-1.0; default=0.5)
    ##
    function UUHipassSharpen(clip C, float "rad", float "gain", float "opacity")
    {
        rad  = Default(rad, 2.0)
        gain = Default(gain, 1.5)
        opac = Default(opacity, 0.5)
    
        HP = C.UUHipass2(rad, 0.0, cont=gain, gray=1>0)
        return C.Overlay(HP, mode="softlight", opacity=opac)
    }
    
    ##################################
    ### highpass filter, optional sharpening & contrast boost
    ##
    ## @ rad    - highpass radius
    ##                           (range 0.0-; default 4.0)
    ## @ sharp  - highpass post sharpening
    ##                           (range -1.0 to +1.0; default 0.0)
    ## @ cont   - highpass contrast boost 
    ##                           (1.0=unity; range=0.1-10.0; default=1.0)
    ## @ gray   - if true, remove color information from the hipass signal 
    ##                           (default=false)
    ##
    function UUHipass2(clip C, float "rad", 
    \               float "sharp", float "cont",
    \               bool "gray", int "bright")
    {
        rad    = Max(0.25, Float(Default(rad,  4.0))) 
        sharp  = Min(Max(-1.0, Float(Default(sharp, 0.0))), 1.0) 
        cont   = Min(Max( 0.1, Float(Default(cont,  1.0))), 10.0)
        bright = Default(bright, 0)
        gray   = Default(gray, false)
    
        B = (rad>=1.0)
        \ ? C.QGaussBlur(rad, rad)
        \ : C.Spline64Resize(_mod(2, C.Width / rad), _mod(2, C.Height / rad))
        \    .QGaussBlur(1.0, 1.0)
        \    .Spline64Resize(C.Width, C.Height)
        C = C.Subtract(B)
        H = (gray) ? C.Grayscale : C
    
        con  = cont
        cont = cont - 1.0
        off  = bright - Round(cont * 128.0)
    
        (C.IsYUV) ? H.ColorYUV(cont_y=256*cont, off_y=5*cont+bright)
        \         : H.RGBAdjust(con, con, con, 1, off, off, off)
    
        return (Abs(sharp)<0.01) ? Last : Sharpen(sharp, sharp/2.0)
    }
    
    ##################################################
    ### quick Gaussian blur
    ##
    function QGaussBlur(clip C, float rad, float "rady")
    {
        radx = Max(1.0, rad)            
        rady = Max(1.0, Default(rady, radx))
        return (radx<0.1 && rady<0.1) ? C
        \ : C.BilinearResize(
        \        Max(16, _mod(2, Float(C.Width)/(radx+1.0))), 
        \        Max(16, _mod(2, FLoat(C.Height)/(rady+1.0))))
        \    .Blur(0.3) [*  *]
        \    .GaussResize(
        \        C.Width, C.Height, p=19)
        ## p=19: softest w/o visible 'blockiness' 
    }
    
    #######################################
    ### scale "normal" float arguments to 
    ### [[ColorYUV]]'s <gain_x>, <gamma_x> & <cont_x> 
    ##
    function f2c(float f) {
        return Round((f - 1.0) * 256.0) 
    }
    
    ##################################
    ### return argument <f> as integer and ensure it is modulo <m>
    ##
    ## @ m - mod value (round toward zero, unless m < 0)
    ## @ f - input (may be positive or negative)
    ##
    function _mod(int m, float f)
    {
        x  = (m>0) ? -1 : 1
        m  = Max(1, Abs(m))
        sg = Sign(f)
        i  = Round(Abs(f))
        return sg * Max(0, i + x * (i % m))
    }
    Last edited by raffriff42; 8th Nov 2017 at 17:54. Reason: image removed
    Quote Quote  
  12. Member Cornucopia's Avatar
    Join Date
    Oct 2001
    Location
    Deep in the Heart of Texas
    Search PM
    Yes is smart to up-convert the bitdepth (to 16bit/color or better) so any intermediate calculations will not inherently degrade the dynamic range.
    BUT...
    The dynamic range here is already greatly limited, made worse if not set optimally.

    Do consider in future a cam model that supports some form of HDR (sometimes called wide or WDR, probably when bracketing). That way, you already have that expanded bitdepth and can do HUGE manipulations without hitting the wall and losing detail.

    Scott
    Quote Quote  
  13. Member
    Join Date
    Nov 2017
    Location
    North Carolina
    Search PM
    Thank you raffriff42, I am going to try that in just a few if I can figure how to get it going.
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!