×

Discussion Board

Page 4 of 6 FirstFirst 123456 LastLast
Results 46 to 60 of 78
  1. #46
    Registered User
    Join Date
    Jan 2012
    Posts
    10

    Re: Nokia Imaging SDK Feedback (Competition)

    Quote Originally Posted by summeli View Post
    I would like to see something similar such as WriteableBitmapEx in the Nokia Imaging SDK. I ended up using it in my own example application, since it made the code so much more readable. The WritableBitmapEx is really a wonderful library for manipulating bitmaps. I could have implemented my own bitmap scaling algorithms, and then draw on top of the canvas, but that would have complicated the code a lot, while I wanted to keep it simple.
    I see WriteableBitmapEx and the Nokia Imaging SDK as complementary offerings. It's fairly easy right now to create a bitmap using the WriteableBitmapEx, then feed the resulting bitmap into the Nokia Imaging SDK for further processing. The WriteableBitmapEx does a wonderful job, I would not expect the SDK to replace it. Perhaps some helper functions could be provided to ease the interaction between both libraries?

  2. #47
    Registered User
    Join Date
    Jan 2012
    Posts
    10

    Re: Nokia Imaging SDK Feedback (Competition)

    Quote Originally Posted by yan_ View Post
    Another solution should be a crop filter with a rotation parameter.
    Code:
    public static IFilter CreateCropFilter(Rect cropArea, double rotationAngle)
    I need it to control correctly ROI extraction.
    Would it be easier if instead of specifying the rotationAngle, you could define the corners of the rotated cropping box (3 corners would be enough)? Would you expect the operation to perform the rotation, or only rotate the crop area (giving a result similar to fitinside where "black" areas are drawn)?

  3. #48
    Nokia Developer Champion
    Join Date
    Nov 2011
    Location
    la bouexiere, france
    Posts
    420

    Re: Nokia Imaging SDK Feedback (Competition)

    I want select an area and rotate is content. But this content mustn't be scaled (it's why FitInside and FitOuside are not good) and without black zone (or zone is outside of the picture). If you prefer i want :
    1- select an area,
    2- rotate picture with area center as transform center,
    3- crop the rotated picture

    Edit: yes, use 3 corner is a solution.
    Last edited by yan_; 2013-08-19 at 19:46.

  4. #49
    Nokia Developer Champion
    Join Date
    Nov 2011
    Location
    la bouexiere, france
    Posts
    420

    Re: Nokia Imaging SDK Feedback (Competition)

    I've begin my second article. You can find the explanation in beta version about the problem and how i create
    Code:
    public static IFilter CreateCropFilter(Rect cropArea, double rotationAngle)
    http://developer.nokia.com/Community...ROI_extraction

  5. #50
    Registered User
    Join Date
    Jul 2013
    Posts
    1

    Re: Nokia Imaging SDK Feedback (Competition)

    As far as image filters are concerned this SDK serves the purpose. But IMHO, I will not call it as Imaging SDK as it works in a part of imaging domain(feature detection, HDR etc). I would call it Image filter SDK. But this is not important.

    Extension Points: The important thing is that, AFAIK, SDK has no extension points. If I need to create custom filters which are not covered by SDK, I have no way. I have no problem with static, sealed FilterFactory class which cannot be extended in traditional ways as it is sealed nor I can write extension methods to it as it static. I tried to implement IFilter interface, I got image from editing session in Apply method but I have no way to pass it back to the session after applying filter algorithm. This is a 'must have' feature for the SDK.
    Last edited by Rumnha; 2013-08-25 at 13:20.

  6. #51
    Nokia Developer Champion
    Join Date
    Nov 2011
    Location
    la bouexiere, france
    Posts
    420

    Re: Nokia Imaging SDK Feedback (Competition)

    Why rendering time increase with scale value between the input and the output (zoom out). In this case, i don't thinks you use a simple interpolation. Maybe it's could be interesting to specify which interpolation SDK must use?

  7. #52
    Registered User
    Join Date
    Jan 2012
    Posts
    10

    Re: Nokia Imaging SDK Feedback (Competition)

    Quote Originally Posted by yan_ View Post
    Why rendering time increase with scale value between the input and the output (zoom out). In this case, i don't thinks you use a simple interpolation. Maybe it's could be interesting to specify which interpolation SDK must use?
    @yan, I will look into this. Should have something to say by Monday.
    -Bert

  8. #53
    Registered User
    Join Date
    Aug 2013
    Posts
    6

    Re: Nokia Imaging SDK Feedback (Competition)

    Hello, this is my rather larger feedback to the Nokia Imaging SDK

    First of all, I’ve just checked most of wiki pages related to this SDK, downloaded provided samples and checked some SDK methods and I’m really surprised how this SDK is simple to use and how many filters it provides. I was expecting something really complicated, undocumented with ~15 average filters, but the actual SDK is the exact opposite, thanks for that.
    Well but nothing is ideal, here are my ideas, how to make this SDK even better.

    The Nokia Wiki related to the Imaging SDK
    Overall the Wiki contains all I could expect regarding the Imaging SDK – I appreciate the step by step guide for creating my first app using this SDK and also the Core concepts page describing the usual workflow.
    • It would be great to have some samples and wiki pages for C++ developers as well. I guess 4/5 of all WP8 developers are using C#, but having direct tutorials for C++ devs could get you definitely more audience.

    The pages describing created samples are fine, but:
    • The File Explorer sample page has some minor errors in Architecture overview – there is no “WPF” in Windows Phone, the author probably meant XAML.

    Another idea that occurred to me, what I’m missing, is:
    • One wiki page with big Filter overview, where user can find all available filters including basic documentation what every parameter does and including preview images with applied filters, ideally for each available filter parameter. This would save us lot of time, if anyone wants to create simple “Instagram” clone with only about 5-10 filters, so he won't have to tediously try each of them, how do they look.

    The provided Samples
    Just some code review regarding the samples:
    • I’d personaly use much shorter and readable implementation for properties implementing INotifyPropertyChanged, for instance StreamItemModel.Filter:
      Code:
      public FilterModel Filter
      {
          get { return filter; }
          set { Set(ref filter, value); }
      }
      private FilterModel filter;
      
      #region INotifyPropertyChanged implementation 
      
      private const string FakePropertyName = @"A property name must be specified if not using C# 5/VS2012";
      protected bool Set<TName>(ref TName field, TName newValue,
          [CallerMemberName] string propertyName = FakePropertyName)
      {
          if (EqualityComparer<TName>.Default.Equals(field, newValue))
          {
              return false;
          } 
      
          field = newValue;
          RaisePropertyChanged(propertyName);
          return true;
      } 
      
      public virtual void RaisePropertyChanged([CallerMemberName] string propertyName = FakePropertyName)
      {
          PropertyChangedEventHandler handler = PropertyChanged;
          if (handler != null)
          {
              handler(this, new PropertyChangedEventArgs(propertyName));
          }
      } 
      
      #endregion
    • As I described in “one big filter overview page”, it would be nice to have similar sandbox sample app for testing any available filter ideally with options to set filter properties to any supported values

    API feedback
    The API seems solid, there is only few things to point out regarding Filter parameter properties:
    • CreateAutoEnhanceFilter needs better documentation. AutoEnhanceConfiguration – methods on this class are quite strangely designed: ApplyLocalBoost, ApplyLocalBoostOff, ApplyAutomaticLocalBoost, etc. I’m not sure which ones works with or against other ones.
    • CreateBlurLevel, CreateDespeckleFilter, CreateNoiseFilter, CreateSharpnessFilter and maybe other filers are using enum values similar to “Low, Medium, High”. I’d probably prefer float parameter with available value between 0.0 – 1.0 to be allowed to create more types of blur/noise filters.
    • CreateCartoonFilter – instead of vague bool parameter ‘bool distinctEdges’ I’d rather use Enum for better readability and possible future adding of another cartoon filter option.
    • There is a huge variability of used options types for filters – int, uint, double, float, byte… maybe using just int on all places, where uint is used, and float on all place where double is used could lead to more clean API design, but that’s just my point of view.
    • CreateSolarizeFilter and some other filters, here I’d add better documentation/xml comment to tell the user, what actually mean [0..1] – what effect has 0 and what 1. It’s possible some users might be confused, how strong the resulting effect will be if 0.25 is used vs 0.75?
    • Maybe each filter type factory method should be available without any mandatory parameters as well, for instance I want to quickly create app with applied Lomo filter, so I’d just use FilterFactory.CreateLomoFilter() instead of guessing, if “0.5, 0.5, LomoVignetting.Medium, LomoStyle.Neutral” are fine parameters for generic Lomo filter.

    FilterGroup – nice idea how to create filter “batches”, but:
    • I’ve found a bug in there – there is no validation when calling new FilterGroup(params) for null values in the array, imagine this:
      Code:
      IFilter[] fga1 = new IFilter[2];
      fga1[0] = FilterFactory.CreateMilkyFilter();
      FilterGroup fg1 = new FilterGroup(fga1);
    • Also it would be completely valid and even more descriptive, if the constructor parameter of FilterGroup will be just IEnumerable<IFilter>, no need for IFilter[]

    Another question is regarding the IFilter interface:
    • Is it possible from dev point of view to somehow implement own IFilter? For Instance I want to create own filter, that applies two specific existing filters at once, like this - is this a valid class that could be used?
      Code:
      public class DoubleMilkyFilter : IFilter
      {
          readonly IFilter fil = FilterFactory.CreateMilkyFilter();
          public void Apply(IEditingSession editingSession)
          {
              fil.Apply(editingSession);
              fil.Apply(editingSession);
          }
          public void Undo(IEditingSession editingSession)
          {
              fil.Undo(editingSession);
              fil.Undo(editingSession);
          }
      }
    • The problem here is the Apply and Undo method on IFilter has in comment
      “Do not call this method directly, use IEditingSession::Apply/Undo”, but the thing is, there is no Apply/Undo method on IEditingSesstion , at least no public method to use. So I guess this needs to be fixed either in API, or in documentation at least.

    Feature requests
    Although the library is nicely stable and quite feature complete, I got some feature request as well:
    • Please create port of this library for Windows 8 apps as well! My guess is it should not be that hard, the WinPRT is really similar to WinRT and I cannot think of any WP-specific API you might’ve used in the current library, that would block the porting.
    • I know, this is a long shot, but having some kind of light version of this SDK for WP7.5 would be nice too (note it’s possible to use async/await in WP7.5 projects using Microsoft NuGet package)
    • Right now there are no extensibility points in the app for creating own filters, only batch filters. Actually all these filters are from dev point of view only “black boxes”.
    • As some devs said before me, there is only limited option, how to modify the processing queue or filter parameters – no option for inserting, deleting specific filters, etc.
    • Maybe I’ve missed it somewhere, but I’d love to have option for directly saving the processed image as png including transparency? I’ve seen only method for saving to Jpeg, WritableBitmap and Image? Maybe it’s possible right now from the WriteableBitmap.
    • I’d appreciate some kind of “Write text filter”, so I can add text to any image with the option of custom font, font size, font style, position Rect…
    • Is it possible to use this library in background task for generating live tile images from set of original source png files? I’m already doing something similar in one of my apps, putting image + text + badge on a tile and saving it as transparent png + displaying it on a live tile/lock screen.

    Wish list
    I’d really love to have more in Nokia Imaging SDK than just “lot of filters + cropping/resizing features”. This last paragraph is mostly about such features, that goes beyond the initial feature set:
    • Full support for reading, changing or deleting jpg EXIF data
    • Possibility to create animated gifs programmatically just like in Cinemagraph app.
    • Simple OCR feature just for returning strings contained within the image.
    • Face or movement detection, that is used in various webcam security apps.
    • API for creating panorama photos.
    • Go Open Source?


    That's all for now, I might add some other minor comments that might come to my mind while testing these samples more thoroughly.

  9. #54
    Registered User
    Join Date
    Jan 2012
    Posts
    10

    Re: Nokia Imaging SDK Feedback (Competition)

    Quote Originally Posted by yan_ View Post
    Why rendering time increase with scale value between the input and the output (zoom out).
    This is due to the macroblock structure of the JPEG compression. The JPEG compression works by processing 8x8 pixels macroblocks. Decoding a macroblock is a pretty expensive operation, as it involves a cosine transform and some other calculations.
    When zooming at the pixel level, decoding/processing one macroblock will provide 64 pixels of the final image (a macroblock is 8x8 pixels). As you zoom out, the pixels needed to create the final image are further and further apart : you need to decode more and more macroblocks to fetch the pixels that will be on the final image, and while each macroblock that must decoded is still a 8x8 macroblock, only a few of the pixels of the block will be used in the final image, others are discarded. The increase in the amount of macroblocks that must be decoded explains the increase in the rendering time.

    When you zoom out far enough, you may end up in a situation where you only need one pixel per macroblock. Through some special tricks, it's really fast to get that single pixel : rendering becomes real fast!

    You will find here a nice overview of the JPEG compression process

  10. #55
    Nokia Developer Champion
    Join Date
    Nov 2011
    Location
    la bouexiere, france
    Posts
    420

    Re: Nokia Imaging SDK Feedback (Competition)

    Quote Originally Posted by lemieux View Post
    This is due to the macroblock structure of the JPEG compression. The JPEG compression works by processing 8x8 pixels macroblocks. Decoding a macroblock is a pretty expensive operation, as it involves a cosine transform and some other calculations.
    When zooming at the pixel level, decoding/processing one macroblock will provide 64 pixels of the final image (a macroblock is 8x8 pixels). As you zoom out, the pixels needed to create the final image are further and further apart : you need to decode more and more macroblocks to fetch the pixels that will be on the final image, and while each macroblock that must decoded is still a 8x8 macroblock, only a few of the pixels of the block will be used in the final image, others are discarded. The increase in the amount of macroblocks that must be decoded explains the increase in the rendering time.

    When you zoom out far enough, you may end up in a situation where you only need one pixel per macroblock. Through some special tricks, it's really fast to get that single pixel : rendering becomes real fast!

    You will find here a nice overview of the JPEG compression process
    Thanks for response.
    I imagine something like that with JPEG file. But i see same phenomena with decoded image. (i'll retest to be sure)

  11. #56
    Registered User
    Join Date
    Jan 2012
    Posts
    10

    Re: Nokia Imaging SDK Feedback (Competition)

    Quote Originally Posted by martinsuchan View Post
    Hello, this is my rather larger feedback to the Nokia Imaging SDK
    Thanks @Martinsuchan, for the long and interesting feedback!

    Trying to briefly answer some of the issues raised...
    I love the idea of having one application that shows all the filters and allow changing the parameters. The "filter Explorer" and the "Filter effect" sample applications are a good step towards that direction, but as you noticed they do not cover each of the 50+ filters. We wanted to keep the samples relatively simple, thus restricted ourselves to only a few filters. It would be great if one of these days a user of the SDK would create a full blown filter demo!
    For your png and exif needs, you should take a look at other libraries: http://imagetools.codeplex.com/ and https://github.com/igrali/portable-exif-lib.
    Right now implementing your own IFilter is not possible. It's really high on backlog for the next release. Harmonizing the filter parameters and Windows 8 support is also really high on that list.
    Other wishes have been noted, hopefully Santa will deliver ;-)
    The typos and the documentation errors you're reporting are real good catches, we will fix them.

    Again, thanks for the good feedback,
    -Bert

  12. #57
    Registered User
    Join Date
    Dec 2012
    Location
    Zagreb, Croatia
    Posts
    73

    Re: Nokia Imaging SDK Feedback (Competition)

    Hi, I just want to agree with everything said before. My wishlist include the ability to create my own filters since alpha blending is not possible with the current set and a few additional filters are missing.

    Also, can you split filters in separate NuGet package? This way the pipeline and the classes are separate from the actual filters involved.

    Can I publish source code used for the competition as public on GitHub? It is easier for long term maintenance and people could get the latest changes I make. This means that my sample applications will become open source. I hope that there is nothing against that. However, that means that the wiki article will get out of sync with the latest version in terms of UI, capabilities and screenshots.

  13. #58
    Registered User
    Join Date
    Aug 2013
    Posts
    6

    Re: Nokia Imaging SDK Feedback (Competition)

    Just an update to my previous feedback regarding custom filters and sample app for testing all available filters including available options.
    • It should be possible to create filters using standard object instantiation rather than only using Factory methods.
    • Each filter should have parameterless constructor and optionally constructor with available parameters.
    • Note there shouldn't be more different constructor types with different parameters, that's currently issue of some filters, BlurEffect for instance.
    • It should be possible to modify filter properties once the filter is created.

    Code:
    IFilter lomoFilter = new LomoFilter();
    IFilter lomoFilter2 = new LomoFilter(0.5, 0.5, LomoVignetting.Medium, LomoStyle.Neutral);
    lomoFilter.Vignetting = LomoVignetting.Low;
    What would be even better, if the filter Properties used some kind of attributes to describe allowed value ranges and default values:
    Code:
    public sealed class LomoFilter : IFilter
    {
        [FilterValueRange(0.0, 1.0, 0.5)]  // min, max, default value
        public double Brightness { get; set; }
    
        [FilterValueRange(0.0, 1.0, 0.5)]  // min, max, default value
        public double Saturation { get; set; }
    
        [FilterValue(LomoVignetting.Medium)] // default value
        public LomoVignetting Vignetting { get; set; }
    
        [FilterValue(LomoStyle.Neutral)] // default value
        public LomoStyle Style { get; set; }
    
        public LomoFilter(){ ... }
        public LomoFilter(double brightness, double saturation, LomoVignetting vignetting, LomoStyle style){ ... }
        public void Apply(IEditingSession editingSession)
        {
            // internal filter implementation
        }
        public void Undo(IEditingSession editingSession)
        {
            // internal filter implementation
        }
    }
    ... and so on for other filters.

    This way it will be really simple to create some kind of "All filter overview" app, that could generate filter editor pages automatically by gathering filter Property attributes and automatically creating Slider/ComboBox user controls for each editable property value. Sliders for ranges, ComboBoxes for enums, etc.

    Another idea about the Nokia Wiki that came to my mind, Id appreciate if the wiki contained information how some of these filters are actually implemented, from mathematical point of view. I'd definitely read that!

    Thanks again and I'm looking forward to interesting updates of this SDK

  14. #59
    Registered User
    Join Date
    Dec 2012
    Location
    Zagreb, Croatia
    Posts
    73

    Re: Nokia Imaging SDK Feedback (Competition)

    Hi Martin,

    I just started implementing a layer on top of the current FilterFactory that would allow just that. I wrote my own classes to wrap existing filters inside. Once I have something to show, I will put it on Github. Maybe you would be interested in that?

    I second your request for the mathematical implementation. The best solution would be to open source the SDK. That way we can port all filters to other platforms which would guarantee consistency across platforms.

  15. #60
    Registered User
    Join Date
    Aug 2013
    Posts
    6

    Re: Nokia Imaging SDK Feedback (Competition)

    I thought about some kind of wrapper too, that would just use the Factory methods internally. Let us know, once you have it

Similar Threads

  1. Replies: 7
    Last Post: 2012-07-25, 01:25
  2. PureView Imaging Competition 2012Q2 - Winners!
    By hamishwillee in forum News and Announcements
    Replies: 15
    Last Post: 2012-07-03, 05:59

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •