image interpolation
hi in my project i want to give some number of still images in those images i should take shuffling images as input but the out put will cme like sequential images it can compare the nearest neighbor by using interpolation methods how can i implement that plz tell me .i have some code tell me how it wrks.
public InterpolationMethod method = InterpolationMethod.Bilinear;
public int newWidth = 0;
public int newHeight = 0;
try {
this.newWidth = Math.Max(1, Math.Min(5000, int.Parse(widthBox.Text)));
this.newHeight = Math.Max(1, Math.Min(5000, int.Parse(heightBox.Text)));
this.method = (methodCombo.SelectedIndex == 0)
? InterpolationMethod.NearestNeighbor
: (methodCombo.SelectedIndex == 1)
? InterpolationMethod.Bilinear
: InterpolationMethod.Bicubic;
this.DialogResult = DialogResult.OK;
this.Close();
}
catch (Exception)
{
Mess开发者_JAVA百科ageBox.Show(this, "Incorrect values are entered", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Start with nearest neighbor interpolation -- it's the simplest. Basically, the approach works like this:
- Allocate memory for your new image (unless it's already been done for you, obviously)
- Iterate over all the pixels of your new image. You can do this in any way you want, but the most common way is called a "scanline traversal" or "raster scan" -- you read across columns first, and when you get to the last column, you move down a row and go back to the first column.
- At each pixel position
(row, col)
, work out the corresponding position(row_o, col_o)
in the old image. For example, if the old image is half the size, thenrow_o = row/2
andcol_o = col/2
. Note that since all the pixel positions are integers, there will be some rounding involved. With nearest neighbor interpolation, it's a necessary evil and you can't avoid it. - Grab the pixel value at position
(row_o, col_o)
in the old image - Assign this value to the new image at position (
row, col)
- At each pixel position
Once you get that out of the way, the other approaches should make more sense.
Scanline traversal:
for (i=0; i < image.height; ++i)
for (j=0; j < image.width; ++j)
{
// Do stuff here
}
What it looks like:
精彩评论