Author |
Topic  |
xequte
    
39117 Posts |
|
rmklever
 
Norway
52 Posts |
Posted - Dec 29 2015 : 20:09:33
|
Picture Color EQ Delphi 2010, Source code and exe demo :) by Roy Magne Klever

Download: www.imageen.com/files/OtherDemos/ColorEqualizer.zip
I was testing an idea I had and it turned out to be quite useful, at least for me. Hope you find it interesting and useful too.
Roy M Klever Klever on Delphi - www.rmklever.com
|
 |
|
wesleybobato
  
Brazil
367 Posts |
Posted - Jan 11 2016 : 12:39:12
|
Hello Roy
Color Picture EQ
It is Possible to delete the Selected Color, Using Transparency, Through Alpha Channels?
Thank you so much. |
 |
|
spetric
  
Croatia
308 Posts |
Posted - Jan 15 2016 : 16:10:00
|
Here is a demo on how to use SpHost library (8bf filters). SpHost is small 94k library and it executes 8bf plugins (filters). Library must be included in your project. Not all filters will work! Complete source code (both demo and SpHost) is inside zip. Demo is provided with few freeware filters.

Usage: Load plugins, open image, press Execute.
Download (C++ source code and EXE): http://www.ImageEn.com/files/OtherDemos/Spetric_host.zip 6419.21 KB
Note: some filters require plugin.dll which can be downloaded from the net. |
 |
|
wesleybobato
  
Brazil
367 Posts |
Posted - Jan 15 2016 : 16:57:18
|
Hello Siniša.
Thank you for sharing.
have a great day. |
 |
|
spetric
  
Croatia
308 Posts |
Posted - Jan 15 2016 : 17:05:42
|
Note that header files are from old PS SDK. If you want to make your own host plug-in you should download the newest SDK version. |
 |
|
wesleybobato
  
Brazil
367 Posts |
Posted - Jan 15 2016 : 17:29:40
|
Again thank you for your information.
a great day. |
 |
|
spetric
  
Croatia
308 Posts |
Posted - Feb 09 2016 : 16:58:42
|
Pantographic Cellular Automata Inpainting:


Exe and C++ source code:
http://www.ImageEn.com/files/OtherDemos/spetric_paca_inpaint.zip 3017.04 KB
Note1: this is quite rudimentary version, just an idea. Fully automated version requires multi-resolution CA and contour analyzing.
Note2: it does not work well when trying to automatically remove object from image with strong diagonal contours (such as shown above). Manual adjustment is necessary.
Have a nice time, Siniša
Edit: to change matrix logical operator, just click on it (except central element). For more info check http://www.sigmapi-design.com/media/Coupled_Map_Lattice_Brush.pdf
|
 |
|
spetric
  
Croatia
308 Posts |
Posted - Feb 10 2016 : 06:21:32
|
Ellipse Rotation

Draw ellipse and rotate it. Ellipse is created from polyline points calculated in grapEllipse object.
Parameters: Resolution - higher the number, less points are used to construct final polyline. Rotation trackbar - obvious
Exe and C++ source: attach/spetric/201621062035_rotate_ellipse.zip 3023.94 KB
More "fancy schmancy" approach would be to check if ctrl or shift button is pressed (in OnMouseMove event) and to rotate ellipse using mouse.
Note: when resolution is set to small number, rotated ellipse is little bit jagged. |
 |
|
xequte
    
39117 Posts |
Posted - Feb 10 2016 : 15:33:01
|
Hi Sinisa
Nice work with the inpaint project; I had fun playing with this one. I look forward to seeing it develop further.
You might want to add some hover hints as there are many options to work with.
Nigel Xequte Software www.xequte.com nigel@xequte.com
|
 |
|
mastinf
 
Italy
46 Posts |
|
spetric
  
Croatia
308 Posts |
Posted - Feb 11 2016 : 15:46:50
|
Besides midpoint, I have implemented another algorithm (trigonometric/general ellipse), so you can switch between those two algorithms in any time to see the difference. With trigonometric/ general ellipse method, polyline is less jagged, because of floating point (double) calculation of output points. If there is an interest, I can upload the updated version.
Siniša |
 |
|
spetric
  
Croatia
308 Posts |
Posted - Feb 15 2016 : 08:13:27
|
I was experimenting with image energy and min-energy seams and this came out as a by-product. Original article: http://perso.crans.org/frenoy/matlab2012/seamcarving.pdf
Seam carving (content aware scaling).
original image:

scaled (by x):

Exe and C++ source code:
attach/spetric/20162158835_seam_carving.zip 2992.39 KB
Note1: I put black pixels on image border after scaling, however, real stuff is to use alpha channel and fill with zeros. Note2: seam carver class is threaded. Note3: There is no backward scaling, because it requires rescaling from beginning, or saving seams into some undo buffer (index maps in article). Note4: enlarging image is not implemented, (it actually should add seams and fill it with average pixel value left+right/2 in case of horizontal scaling). Note5: There is no object protection, but it's not hard to implement:we can put a high energy value for pixels in selection mask. Note6: To force object removal, we put negative energy values for pixels in selection mask. Note7: To preprocess seams indexing, as suggested by article, we can use idle time in application, and start a thread immediately after image is loaded to create index maps. |
 |
|
xequte
    
39117 Posts |
Posted - Feb 15 2016 : 17:30:38
|
Wow, it's impressive how much the seam can be reduced without noticably affecting the subject.

Nigel Xequte Software www.xequte.com nigel@xequte.com
|
 |
|
spetric
  
Croatia
308 Posts |
Posted - Feb 17 2016 : 16:12:26
|
Yes, very cool algorithm, but a little bit slow. There are some modifications that trades precision vs. speed.
Original algorithm removes seam by seam, but there are some implementations that calculate all possible 0 connected min seams on original image and then perform seam removal (this is also suggested in article's appendix).
I have modified prog. a bit (there were also some bugs in energy calculation) and created separate threads for horizontal and vertical seams calculation without removal. Threads are collecting seams and real removal (and restore) is much faster.
However, I have a problem when there is simultaneous horizontal and vertical resizing...I need to create a new map to resolve vertical/horizontal seams crossing. I'll also try an approach with 0 connected seams. |
 |
|
w2m
   
USA
1990 Posts |
Posted - Mar 21 2016 : 10:41:50
|
TIEFileDragDrop To TImageEnMView Demo by William Miller/Adirondack Full Source Compiled with Delphi Seattle, but is expected to compile with Delphi 2010 or higher.

The TIEFileDragDrop To TImageEnMView Demo shows how to drag and drop images from the windows shell (File Explorer) to TImageEnMView.
TIEFileDragDrop is not documented for use with TImageEnMView so a brief overview is shown below:
Create a AFileDrop: TIEFileDragDrop; declaration.
AFileDrop: TIEFileDragDrop; Create a TIEFileDragDrop class in FormCreate:AFileDrop := TIEFileDragDrop.Create(ImageEnMView1, DropFiles);
Create a Private declaration DropFiles method procedure DropFiles(Sender: TObject; ssFiles: TStrings; dwEffect: Integer);
Do not explicitly free the AFileDrop object so register a expected memory leak in FormCreate: RegisterExpectedMemoryLeak(AFileDrop);
Activate dropping in FormCreate: AFileDrop.ActivateDropping := True;
Download: http://www.ImageEn.com/files/WMDemos/IEFileDragDropToMView.zip 3122.91 KB
Note: Some exception logging Delphi add on's like EurekaLog may show a memory leak even after registering the memory leak, but this is a false positive according to the developers of ImageEn:
"It is best to the let the application handle the freeing of TIEFileDragDrop. Of course then you will get a warning from your memory management tool so you need to register the expected leak (not that it is actually a leak. The object exists for the time of the application and is destroyed when the owner is destroyed).", Nigel Cross
Bill Miller Adirondack Software & Graphics Email: w2m@hughes.net EBook: http://www.imageen.com/ebook/ Custom Commercial ImageEn Development |
 |
|
w2m
   
USA
1990 Posts |
Posted - Mar 29 2016 : 12:06:13
|
Fast Brush Painting With IEBitmap Canvas And Alpha Channel Demo by William Miller/Adirondack Full Source Compiled with Delphi Seattle, but is expected to compile with Delphi 2010 or higher.
 This demo shows how to do fast "brush" painting with IEBitmap, AlphaChannel and GDICanvas. The demo does not use a traditional "brush". Previous brush drawing demos using GDIPlus all exhibiit slow brush painting that produce intermittent gaps when painting because of the inherent slow speed of TIECanvas drawing speed. This technique has been optimized as much as possible and produces very fast drawing with a smooth continuous brush that can be used for things such as signing signatures on documents, filling information on forms or basic brush painting.
Download: http://www.ImageEn.com/files/WMDemos/PaintBrush.zip 3162.74 KB
Bill Miller Adirondack Software & Graphics Email: w2m@hughes.net EBook: http://www.imageen.com/ebook/ Custom Commercial ImageEn Development
|
 |
|
spetric
  
Croatia
308 Posts |
Posted - May 06 2016 : 07:55:59
|
Scale Invariant Feature Transform (C++ XE5)
Implementation is done using FastSift console application: https://sourceforge.net/projects/libsift/
1. Load source (template) image. 2. Calculate source SIFT key features*. 3. Load target image. 4. Calculate target SIFT key features*. 5. Calculate source/target matching. 6. Adjust distance threshold.
* = if source/target key features are not calculated they will be calculated in step 5.
Note: matching algorithm is little bit naive: O(n^2). Faster approach is to implement k-d tree algorithm: O(n*log(n)). https://github.com/jtsiomb/kdtree
Figure 1: source image key features. Each circle radius depends on feature scale

Figure 2: matching lines between source and target images with given threshold

Binaries and source code:
attach/spetric/20165675412_ien_sift.zip 3062.74 KB
Note: any suggestions and prog. corrections are welcomed. Thanks.
Edit: console program requires grayscale pgm image for calculation. Program IenSift accepts 24-bit images, which are converted to grayscale and saved as pgm (source.pgm, target.pgm). IenSift invokes console program and it calculates key features/descriptors and saves them in respectable .kds files. Files (.kds) are parsed and structure (record) is filled with key/descriptor data.
|
 |
|
xequte
    
39117 Posts |
|
spetric
  
Croatia
308 Posts |
Posted - May 09 2016 : 01:39:01
|
Hi Nigel,
Maybe it's a bug in demo program. On my side it works Ok.

Here are steps for this test:
1. start IenSift.exe 2. Load source image 3. Load target image 4. Click button "Calc. source/target matching" 5. Adjust threshold slider to 0.5
If it does not work, the problem is probably in paths inside the prog. I will test the demo in clean virtual Windows Xp/7 to see if it works correctly.
EDIT: Got it! It does not work on clean Win xp/7 machines:
Dependent Assembly Microsoft.VC80.OpenMP,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053" could not be found.
Console app requires MS Visual C++ redistributable package. As I do have MSVC redistributable package on my PC it worked correctly. More precisely, it requires (VC80) Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package.
In "fast sift" description clearly stands: "A cross-platform library that computes fast and accurate SIFT image features. libsiftfast provides Octave/Matlab scripts, a command line interface, and a python interface (siftfastpy). Optimized with SIMD instructions and OpenMP.
I thought that an author packed OpenMP APIs in siftfast.dll, but I was utterly wrong...what a pity. Too much dependencies.
|
 |
|
Topic  |
|