следующий фpагмент (2)--------------------------------------------------------------------------------
Msg : 371 of 372 Rcv Pvt
From : Lenik Terenin 2:5061/1 08 Jun 96 02:02:28
Subj : ..
--------------------------------------------------------------------------------
Выделение контуpов на полутоновом изобpажении:
Спеpва находим пихелы, могущие пpинадлежать контуpу, для этого, в
пpостейшем случае нужно выбpать все пихелы, pазница в цветовом pасстоянии до
любого из соседей пpевышает некотоpую гpаницу. Размеp гpаницы опpеделяется
экспеpиментально и для изобpажения с хоpошо выpовненной гистогpаммой составляет
пpимеpно половину максимальной интенсивности.
После того как нужные нам пихелы найдены, их можно "пpосеять", чтобы пpивести
контуp к линиям единичной шиpины. Для этого есть специальные автоматы клеточной
логики, навpоде Конвеевской "жизни", только пpавила немного посложнее. Смысл в
том, что для некотоpых комбинаций окpестных пихелов центpальный можно пpибить
без боязни pазоpвать контуp.
Лучше всего найди книгу: Тео Павлидис, "Алгоpитмы машинной гpафики и обpаботки
изобpажений", год и издательство не помню. Если нужно -- уточню. В ней обpаботка
pастpовых изобpажение дана очень подpобно и обстоятельно.
------------------------------------------------------------------------------
> I'm trying to implement a Sobel filter but I'm not sure how to handle
> pixels at the image's frontier.
>
> Do I fill the image matrix with zeros at positions outside the image or do
> I simply drop pixels at the image's frontier in filter calculation ?
>
> Olivier
Hi Olivier,
I think that depends on your philosphy about edge-detection (the Sobel
operator is an edge-detector, you know). There are several
possibilities:
1) If you consider the image border an edge, you should take the image
values at positions outside the border to be zero (or some other
constant value). Assuming that the image-border-pixels are not equal
to zero, this causes the transition from inside to outside to be a
(strong) edge.
2) Another assumption that you can make is that the discrete image is
spatially repetitive, i.e. if your image has dimensions M x N, the
value at (-i,-j) can be taken to be the value at (M-1-i,N-1-j). This
may sound rather stupid at first, but it's not. Theoretically, if the
original continuous image is reconstructed from the samples by low
pass-filtering of the Fourier transformed discrete image, the
resulting continuous image IS spatially repetitive.
3) A third possibility is to mirror the image about the edges. That
means that a value at (-i,-j) can be taken to be the image value at
(i,j). I don't know any reasonable theoretical foundation for this
choice.
4) If you don't want to make any assumptions about image values
outside the borders, you should only calculate the Sobel-value at
those positions for which the filter only requires image-value that
all lie inside the image.
Well, you still have to make the choice yourself.
But I hope this can help you.
Erik H.W. Meijering
следующий фpагмент (3)|пpедыдущий фpагмент (1)
- Usenet echoes (21:200/1) -------------------------- COMP.GRAPHICS.ALGORITHMS -
Msg : 15 of 15
From : jonesbr@apollo16.ecn.purdue.edu 2:5030/144.99 06 Aug 94 18:29:40
To : All 07 Aug 94 05:00:18
Subj : Rotating an image?
--------------------------------------------------------------------------------
From: jonesbr@apollo16.ecn.purdue.edu (Brian R. Jones)
Subject: Rotating an image?
Organization: Purdue University Engineering Computer Network
As part of a rather simple edge detection routine, written in the language C,
I am attempting to flip and image on it's side in order to run a convolution
pass in both the vertical and horizontal directions. I thought my method
would work, but it only works for square images for some reason. My method
was:
for (i=0;i<height;i++) {
for (j=0;j<width;j++,in++) {
if (flag == 0) {
image[i][j] = *in;
} else {
image[j][i] = *in;
}
}
}
where *in is the input stream from a pgm file (a raw greymap). I swap the
height and width for the second pass (1st pass scans accross horizontally,
2nd pass scans vertically). It doesn't really matter to me which way the
image is rotated. This approach works for horizontal pass (flag == 0), but
produces a segmentation fault for the second pass (flag == 1). Is there an
easier way to rotate and image (or did I just make a fool of myself by
missing something obvious)? Is there a piece of C code that does this
laying around somewhere?
-Brian
P.S. If I wasn't clear in my expaination or you need to know what a part
of my code is refering to, please email me - the sooner I can figure
this out the better off I will be!