View my account

Configuration change between d415 and d435 camera | C#

Comments

66 comments

  • MartyG

    The D415 has around 2.5x the image quality of the D435.  The reduced quality on D435 is a trade-off of the gains from a wider FOV, wider IR sensor and faster shutter.

    As a first step to improving the image, you could turn off the IR Emitter (the component separate from the IR imager that projects a semi random dot pattern onto the scene).  This can give around a 30% reduction in RMS error (depth noise over distance, which linearly increases as distance from the camera increases).  

    The 400 Series cameras can use the ambient light in a scene instead of a dot pattern projection to analyse the depth of flat / low texture surfaces if the scene is well lit.

    C# code for disabling the IR Emitter can be found in the link below.

    https://github.com/IntelRealSense/librealsense/blob/master/wrappers/csharp/Documentation/cookbook.md#controlling-the-laser 

    0
    Comment actions Permalink
  • MartyG

    The thick black outline is an effect called Occlusion that is created by the difference in the physical position of the RGB and IR imagers on the camera.  The links below have useful information.

    https://github.com/IntelRealSense/librealsense/issues/3106#issuecomment-456091717 

    https://github.com/IntelRealSense/librealsense/issues/2445 

    0
    Comment actions Permalink
  • Thomas Chenus33

    Once again, thank you Marty for your responsiveness :)

    I try two method to disabling the IR Emitter, but nothing works ...

    First where I declare my pipeline :

    But with this method I go directly to the "catch" of my function without displaying anything.

    I then tried to do it in my ProcessingBlock :

    And there I just don't have a compilation error, but I don't have a color image or a depth image anymore.

    Did you now where should I declare the sensors "disable" ? I probably misunderstood something about that I think.

    0
    Comment actions Permalink
  • MartyG

    The first method where you declare the pipeline looks the most correct to me.  Comparing your script to the Cookbook version, I notice that on this line:

    pipeline = new Pipeline();

    The Cookbook's version of it adds var at the start of the instruction.  your script, if it followed this formatting, would look like this:

    var pipeline = new Pipeline();

    It also looks as though you have not got a PipelineProfile defined. In the structure of your script, it would look this this:  

    PipelineProfile selection = pipeline.Start(cfg);

    These lines follows directly after:

    var selected_device = selection.Device;

    var depth_sensor = selected_device.Sensors[0];

    depth_sensor.Options[Option.EmitterEnabled].Value = 0f;

     

    Does this seem correct to you as a C# programmer, please?

    0
    Comment actions Permalink
  • Thomas Chenus33

    Hi Marty,

    Thanks for the answer, yes I work in C#. That's actually what I was doing (see picture 1 of the message above), I didn't understand that it worked, but in fact it gives me a really bad quality depth image! And I still have a lot of noise on my color image.

    Moreover I'm trying to do a calibration of the d435 camera, I saw that it could be important for the d435 camera. I followed this link " https://www.intelrealsense.com/self-calibration-for-depth-cameras/ ".
    But I don't have the "on-ship calibration" option which is shown in the video show in the link video :

    Me I only have this :

    0
    Comment actions Permalink
  • MartyG

    The RealSense documentation says that On-Chip Calibration requires RealSense SDK version 2.29.0 or newer, and firmware version 5.11.15.0 or newer.  Does your SDK and camera firmware setup meet these requirements please?

    0
    Comment actions Permalink
  • Thomas Chenus33

    I didn't have the right version. I was able to do it once this one was updated, thank you. The calibration didn't help me a lot with the depth of the image, maybe a little bit.

    For the noise on my color image I have the impression that it comes from the ambient light and shadows on what I want to detect. I'm gonna try to get a controlled light to play with these shadows.

    0
    Comment actions Permalink
  • MartyG

    On-Chip Calibration through the RealSense Viewer is a quick and lightweight alternative to a full, advanced calibration with the Dynamic Calibrator software.

    https://downloadcenter.intel.com/download/28517/Intel-RealSense-D400-Series-Calibration-Tools-and-API 

    If you are using Linux, installation instructions for the Dynamic Calibrator are on page 14 of the user guide for the software.

    https://www.intel.com/content/www/us/en/support/articles/000026723/emerging-technologies/intel-realsense-technology.html 

    If you have the IR Emitter enabled and projecting a dot pattern onto the scene, depth error may reduce by around 30% if the pattern is turned off.  In a well-lit scene, the camera can use ambient light instead of the pattern to analyse depth on flat / low-texture surfaces.  LED lights can also provide good results as they do not cast shadows, which is why professional photographers use them.

    If you feel that you need a dot pattern, an external LED dot-pattern projector will produce less noise than the camera's built in laser-based dot projector, as the camera's laser can cause a noise phenomenon known as 'laser speckle'.

    0
    Comment actions Permalink
  • Thomas Chenus33

    Thanks again Marty,

    I wait to receive an environment with leds to suppress shadows and I come back to you to tell you the result obtained with and without the IR sensor.

    0
    Comment actions Permalink
  • MartyG

    Okay, thanks so much.  I look forward to your update.   :)

    0
    Comment actions Permalink
  • Thomas Chenus33

    I have a question again,

    Can we find a sensitivity curve of the IR sensor of the D435 camera?

    Something like this :

    I only found that on dataSheet :

    0
    Comment actions Permalink
  • Thomas Chenus33

    It's to choose leds that won't interfere with the IR sensor wavelengths.

     

    0
    Comment actions Permalink
  • MartyG

    I have had a couple of other enquiries recently about a sensitivity curve. The most recent discussion is in the link below.

    https://github.com/IntelRealSense/librealsense/issues/6094 

    The IR imagers on the 400 Series cameras do not have IR-Cut filters, so they can see all visible nm wavelengths, including light from LED illuminators.

    https://github.com/IntelRealSense/librealsense/issues/2000 

    0
    Comment actions Permalink
  • MartyG

    I recall a recent discussion on optical filters if you wish to investigate that subject.

    https://github.com/IntelRealSense/librealsense/issues/6050 

    0
    Comment actions Permalink
  • Thomas Chenus33

    Hello Marty, 

    I have my frame ready for testing, at first I will test without light, in an almost closed environment with just the IR sensor. During my tests at home is how I got the best results.

    But now I have a problem because before I worked on a pc under window 10, I didn't have any problem, but now I need to use the camera on a server under the WINDOWS 2012 R2 version. I tried to install several SDK, when I put the windows 10 version I have a DLL error, which according to my research is not resolvable. I tried to install the SDK version for windows 7, and I don't get an error but when I connect the camera to my viewer it is not detected by the viewer. But if I go to my computer's peripherals I can see that it is connected.

    So do you know which version of sdk corresponds to windows 2012 R2 server?

    0
    Comment actions Permalink
  • MartyG

    Windows Server R2 2012 is in a middle-ground between Windows 7 and Windows 10, as it uses Windows 8 interface elements.  So using the Windows 7 version of the RealSense SDK is probably the most compatible route, since 2012 is the closest in age to the Win7 architecture.

    Did you check the box for Windows 7 in the installer please, as suggested by Point 4 of the Win7 SDK installation instructions?

      https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_win7.md

     

    0
    Comment actions Permalink
  • Thomas Chenus33

    Good morning :) 


    Thank you, the windows 7 version work with the server, I can see the flux on the viewer now!

    But I have a new problem, a problem that I had at the beginning of the project too, which is that when I launch the program I have the message "impossible to load the realsense2 DLL. Specified module not found". Normally I solve the problem by copying "realsense2.dll" from the libraelsense folder and putting it in my "debug" folder in my program. I did it again last week on the computer I used before the server, and it worked without any problems. But on the server, even though I copy it everywhere in my solution, I still get the error message. I tried to run it in debug, in release, by changing the CPU and by forcing on x64, but nothing works!
    Do you have any idea what can happen? Do I need a different DLL version for the win7 SDK?

    0
    Comment actions Permalink
  • Thomas Chenus33

    I saw in the librealsense folder there was a DLL named intel.realsense.dll but in my program it was intelrealsensed.dll. Could that be the problem? I remember making a change to that in my program at the beginning of the project.

    The problem when I change and put the intelrealsense.dll DLL and reference it in my program, my code doesn't have an error, but when I run it I get the error: "System.IO.FileNotFoundException: 'Cannot load the file or assembly 'Intel.RealSensed, Version=1.0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The specified file cannot be found.'" If I put it back into my intelrealsensed.dll folder without referencing it I no longer get this error, but I get again the error: "impossible to load the realsense2 DLL. Specified module not found" 

    I may be on the wrong track, but I try everything because it's frustrating to be stuck on a problem for which I had already lost time at the beginning of my project ...

    0
    Comment actions Permalink
  • MartyG

    The link below explains that if you get Intel.RealSensed instead of Intel.RealSense then it indicates that you have created a Debug build (for people who want to contribute code to the RealSense SDK) instead of a Release build.

    https://github.com/IntelRealSense/librealsense/issues/5022#issuecomment-565879278 

    0
    Comment actions Permalink
  • Thomas Chenus33

    I've read all the topic but I don't understand what is the solution for the problem?

    0
    Comment actions Permalink
  • Thomas Chenus33

    I dont want to run the librealsense exemple but my own program

    0
    Comment actions Permalink
  • Thomas Chenus33

    I try to delet all my references and launch the program in release, but I still have DLL intelrealsensed.dll but now in release file

    0
    Comment actions Permalink
  • MartyG

    99% of people will be using Intel.Realsense.dll in their program, not the 'D' version of it.  So you should be including  Intel.Realsense.dll in your project and referencing that file name.

    0
    Comment actions Permalink
  • Thomas Chenus33

    I already do that !! But if I do that I have the message "System.IO.FileNotFoundException: 'Cannot load the file or assembly 'Intel.RealSensed, Version=1.0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The specified file cannot be found.'"

    0
    Comment actions Permalink
  • Thomas Chenus33

    I don't understand why he's still trying to load the intelrealsensed.dll, when I've changed the references to intelrealsense.dll

     

    0
    Comment actions Permalink
  • MartyG

    Someone else who had a FileNotFoundException with Intel.RealSensed.dll said that they solved it by copying the pre-built DLL files into the debug folder.  Does you have a folder called debug, please? 

    0
    Comment actions Permalink
  • Thomas Chenus33

    Yeah, it's the way I use it on my computer. But even though I copy the realsense2.dll file directly into the debug folder it still gives me the error message.

    And on Thursday when the server didn't work I tested on a computer other than mine and by doing this technique it worked just like on my computer. But now on the server it doesn't work

    0
    Comment actions Permalink
  • Thomas Chenus33

    But on my computer I have the lastest version of SDK

    0
    Comment actions Permalink
  • MartyG

    Are you running Librealsense on your networked computer as a Virtual Machine, please?

    0
    Comment actions Permalink
  • Thomas Chenus33

    I'm not sure I understand, but no, I don't use a virtual machine. I'm directly on the server right now.

    0
    Comment actions Permalink

Please sign in to leave a comment.