
www.Usenet.com
| <-- __Chronological__ --> | <-- __Thread__ --> |
so if that code uses the low pass filter (1 1 1) (1 1 1) (1 1 1)
smooths
why doesn't (0 1 0) (1 -4 1) (0 1 0) sharpen the image? according to
sources i've found that filter applied in the same manner should
sharpen an image?
"Roger Rowland" <[EMAIL PROTECTED]> wrote in message news:<[EMAIL PROTECTED]>...
> Ooops, just re-read your code. You'll need to adjust that result to average
> over your mask, so for the mask you specified, I guess it would be -
>
> pWork[(y * my_image.width) + x] = (int)(Sum / 32.0f);
>
> (if I haven't messed upagain!)
>
> I was looking at my Gaussian smooth in which I generate a normalised mask
> beforehand.......
>
> Sorry for any confusion!
>
> ------------------------------------------------------
> EMail: roger dot rowland at rmrsystems dot co dot uk
> "Roger Rowland" <[EMAIL PROTECTED]> wrote in message
> news:[EMAIL PROTECTED]
> > Hi Dave,
> >
> > Thanks for the "thanks"! You're very welcome.....
> >
> > Anyway, I think you just need to remove the sqrt() from the Sobel routine
> to
> > use it with your smoothing mask. It was only there to get the magnitude of
> > the edge from the combined x and y directions. So something like -
> >
> > pWork[(y * my_image.width) + x] = Sum;
> >
> > in your loop, instead of -
> >
> > > // calculate result
> > > Result = Sum;
> > > if (Result > 0)
> > > {
> > > Result = sqrt(Result);
> > > }
> pWork[(y * my_image.width) + x] = Result;
> > > }
> >
> > should work fine.
> >
> > Best regards,
> > Roger
> >
> >
> > ------------------------------------------------------
> > EMail: roger dot rowland at rmrsystems dot co dot uk
> > "DaveWilson" <[EMAIL PROTECTED]> wrote in message
> > news:[EMAIL PROTECTED]
> > > Thanks for the great help provided by this group and in particular
> > > Roger Rowland.
> > >
> > > I've nearly got all functionality i require for my image processing
> > > package and i thought that by manipulating an edge detection function
> > > that had been provided i would easily be able to apply other templates
> > > such as smoothing and blurring. however i'm not getting the desired
> > > results cou;ld some one please have a look over this code?
> > >
> > > int Smooth()
> > > {
> > > double Result;
> > > int i, j, x, y, Value;
> > > int Sum, NeighX, NeighY;
> > >
> > >
> > > int smooth[][3] = {{1, 3, 1}, {3, 16, 3}, {1, 3, 1}};
> > >
> > >
> > > // allocate working array
> > > double* pWork = new double [my_image.width * my_image.length];
> > >
> > > // apply over whole image
> > > for (y = 0; y < my_image.length; y++)
> > > {
> > > for (x = 0; x < my_image.width; x++)
> > > {
> > > // apply filter at this xy
> > > Sum = 0;
> > > for (i = -1; i <= 1; i++)
> > > {
> > > for (j = -1; j <= 1; j++)
> > > {
> > > // get neighbour
> > > NeighX = x + i;
> > > NeighY = y + j;
> > >
> > > // "extend" image at extremeties
> > > if (NeighX < 0)
> > > {
> > > NeighX = 0;
> > > }
> > > if (NeighX >= my_image.width)
> > > {
> > > NeighX = my_image.width - 1;
> > > }
> > > if (NeighY < 0)
> > > {
> > > NeighY = 0;
> > > }
> > > if (NeighY >= my_image.length)
> > > {
> > > NeighY = my_image.length - 1;
> > > }
> > >
> > > // accumulate
> > > Value = my_image.raw_image[(NeighY * my_image.width) + NeighX];
> > > Sum = Sum + (Value * smooth[j + 1][i + 1]);
> > >
> > > }
> > > }
> > >
> > > // calculate result
> > > Result = Sum;
> > > if (Result > 0)
> > > {
> > > Result = sqrt(Result);
> > > }
> pWork[(y * my_image.width) + x] = Result;
> > > }
> > > }
> > >
> > > // copy result back into source array
> > > for (i = 0; i < my_image.width * my_image.length; i++)
> > > {
> > > // clamp to 255
> > > if (pWork[i] > 255)
> > > my_image.raw_image[i] = 255;
> > > else
> > > my_image.raw_image[i] = (unsigned char)pWork[i];
> > > }
> > >
> > > return 0;
> > > }
> > >
> > > Thanks for any help
> > >
> > >
> > > //code supplied by Roger Rowland (butchered by me :p)
> >
> >
| <-- __Chronological__ --> | <-- __Thread__ --> |