Jump to content
How to Install Plugins ×
Paint.NET 5.1 is now available! ×

Recommended Posts

Posted (edited)

Hello,

Here is a simple plugin to correct the barrel or pincushion distortions in digital photos.

(More information about these distortions in wikipedia article)

 

You can download the plugin here:

 

kb_lens.zip

 

To use it simply unzip it to c:/Program Files/Paint.NET/Effects/, the plugin is in Filters->Photo->Distortion

 

Here is an example of the plugin usage. On the first photo you can see the effect of the lens distortion (I traced it with dotted red line), which was eliminated in the second image using the plugin:

2108094853_80c9f97f6f.jpg

 

This effect is even stronger with macro shots, cheaper lenses on compact cameras and ultra-wide (fisheye) lenses.

I wrote the plugin using Codelabs, if there is someone who would like to implement it in C# (in order to give a nice interface or to optimize it), i can post the source code. :D

Edited by toe_head2001
Fixed attachment
  • Upvote 2
Posted

Yes, sure I may help you (if you want me to)...

I already think about the IndirectUI features:

...Choose the center X,Y Offset,

...Keep background (yes/no, instead transparent)

...X,Y separated factors

...Limits +/- 500 (instead 50) : ok perhaps it's crazy, but just for the fun of distortion!

Like I did here:

viewtopic.php?f=5&t=21525

(you could use this source as a template by your own...)

Let me(us) know...

Posted
Screenshots please!

I made some. @Pyro: This issue is occuring when I use it, too.

Edit: Please note: I forgot to change the language to English. To prevent confusion, "Abbrechen" is not a weird plugin-related button, but means just "Cancel". :wink:

And please forgive me the bad quality of the pictures, but I want them to be suitable for all bandwiths.

54957107zc6.jpg

26845797dx3.th.jpg

35930353en6.th.jpg

Posted

Good people, here's the code for CodeLabs! Have fun playing with it, I hope you'll make it even cooler!

int Amount1=-20;   //[-50,50] Amount per thousand(°/oo)

float [] rd = null;
int Achange=0;	//To verify if there is a slider change

void Render(Surface dst, Surface src, Rectangle rect)
{ 
   float Percent= (float)(Amount1 / 500.0f);  // Distortion percent

   PdnRegion selectionRegion = EnvironmentParameters.GetSelection(src.Bounds);

   Rectangle selection = this.EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt();

   int w,h,x0,y0,w2,h2,raymax;
   float xd,yd,rdcur,ru;
   w = selection.Right - selection.Left;
   h = selection.Bottom - selection.Top;
   x0=selection.Bottom;y0=selection.Right;
   h2=h/2;w2=w/2;
   raymax=(int)Math.Sqrt(h2*h2+w2*w2)+1;
   if(rd == null){ //first run->alloc and init
       rd = new float[raymax];
       Init(raymax,Percent,w,h);
   }else if(Achange!=Amount1){  //slider change->reinit
       Achange=Amount1;
       Init(raymax,Percent,w,h);
   }
   for(int y = rect.Top; y < rect.Bottom; y++){
       for (int x = rect.Left+1; x < rect.Right/2+1; x++){	//BUG: if it goes from rect.Left it gives an exception
           ru=(float)Math.Sqrt((float)((w2-x)*(w2-x)+(h2-y)*(h2-y)));
           rdcur=rd[(int)ru]*(1-ru+(float)Math.Floor(ru)) +  rd[(int)ru+1]*(ru-(float)Math.Floor(ru));
           rdcur/=ru;
           xd=(w2-x)*rdcur;yd=(h2-y)*rdcur;
    dst[x,y] = src.GetBilinearSample(w2-xd,h2-yd);
    dst[w-x,y] = src.GetBilinearSample(w2+xd,h2-yd);
       }	//idea of optimisation: the function is symmetrical horizontally and vertically,
       	//so at the same moment (x,y),(w-x,y),(x,h-y),(w-x,h-y) can be calculated
   } 
}
void Init(int raymax, float percent, int w, int h)
{		//We precalculate the distortion function in rd
   	double k,r,inc,ru1,ru0,m;
int l;
// *** Calculate K *** (k is the distortion constant based on the distortion %)
double yd1,yd2,rd2,alfa;
yd1=h/2;
yd2=yd1*(1-percent);
alfa=Math.Atan2(h,w);
rd2=yd2/Math.Sin(alfa);
k=(yd1-yd2)/(rd2*rd2*yd2-yd1*yd1*yd1);


   	r=0;
inc=0.1;
l=1;rd[0]=0;
while(l		ru0=r+r*r*r*k;
	r+=0.1;
	ru1=r+r*r*r*k;
	if(Math.Floor(ru0)!=Math.Floor(ru1)){
		m=(ru1-ru0)/inc;
		rd[l]=(float)(r-(ru1-Math.Floor(ru1))/m);
		l++;
	}
}
}

Posted

And sorry I didn't post any screenshots, here's mine, a real example with lens distortion:

2108094853_80c9f97f6f.jpg

On the original I marked the distorted edgees with red dotted line. There are lenses with even stronger distortions (especially the wide angle zoom lenses). I hope you find this plugin usefull.

Posted

I updated the original plugin, still using my codelabs version. You can download it in the original post!

This fixes just the nasty edge bug, there is no other change.

Thanks for the quick modification, MadJik, I think I'll modify your version too (when i'll have time)!

  • 3 weeks later...
  • 8 years later...
Posted

I doubt kbarni is still visiting the forum, so not too much point in posting this?. (I was using it within a selection).

Shame, as it is a useful effect. Thanks for posting the code, I may try to squash some bugs :bug: at some point.

 

File: C:\Program Files\NEWpdn\Effects\kb_lens.dll
      Effect Name: PaintDotNet.Effects.UserScript
      Full error message: PaintDotNet.WorkerThreadException: Worker thread threw an exception ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.

 

Red ochre Plugin pack.............. Diabolical Drawings ................Real Paintings

 

PdnForumSig2.jpg

  • 4 years later...
  • 3 years later...
Posted (edited)
22 minutes ago, Pixey said:

Absolutely!  You must update the latest version in order for the Plugins to work correctly.

Is there a way for me to download the older version of this plugin?

The reason I'm not using the latest version of Paint.NET is because there are other plugins that won't work on the newer version. Also, some of BoltBait's plugins had changes I didn't like, so I stuck with the older version.

Edited by Haoto
Posted
6 minutes ago, Haoto said:

Is there a way for me to download the older version of this plugin?

 

No, one can't, sorry.  The best way is to update to the latest version of paint.net.  I'm afraid we can't give solutions, or help, with older versions.

 

If you are having problems with newer Plugins, one has to 'bite the bullet' and learn how to use the newer Plugins :) 

 

If you have a particular problem with one of the newer ones, you can post an image of what you ae trying to accomplish and people on here, as well as the Plugin author, should be able to help you to get to your desired result.

30b8T8B.gif

How I made Jennifer & Halle in Paint.net

My Gallery | My Deviant Art

"Rescuing one animal may not change the world, but for that animal their world is changed forever!" anon.

 
Posted (edited)

@toe_head2001 Is there another plugin that's up-to-date but does the same thing as this one?

 

I'm still hesitant on using the new version of Paint.NET because the changes made to the plugins will ruin my consistency...

All I wanted was text alignment, especially when there's multiple paragraphs.

Edited by Haoto

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...