首页
编程语言
数据库
网络开发
Algorithm算法
移动开发
系统相关
金融统计
人工智能
其他
首页
>
> 详细
辅导VS C++算法、辅导C++程序 辅导R语言程序|讲解R语言编程
// V-S
bool Watershed::WatershedTransformOfVS(IplImage *src, int &basinCount)
{
#define MASK -2 /* initial value of a threshold level */
#define INIT -1 /* initial value of imgOut */
#define WSHED 0 /* value of the pixels belonging to the watersheds */
#define INIT_DIST 0 /* initial value of imgDist */
/*
. --input: imgIn, decimal image;
--output: image of the labeled watersheds;
. Initializations:
--Value INIT is assigned to each pixel of imgOut:
--current_label = 0
--current_dist: integer variable
--imgDist:work image (of distances),initialized to 0;
*/
if (src == NULL)
{
return false;
}
const int width = src->width;
const int height = src->height;
const int widthStep = src->widthStep;
const int channels = src->nChannels;
uchar *imgIn = (uchar *)src->imageData;
if (channels != 1) // src
{
return false;
}
// V-S
//
//
//
BASIN_NUM *imgOut = new BASIN_NUM[height * widthStep]; //
for (int i = 0; i < height * widthStep; i ++) imgOut[i] = INIT; //
int *imgDist = new int[height * widthStep]; //
for (int i = 0; i < height * widthStep; i ++)
imgDist[i] = INIT_DIST; //
int currentNum = 0; //
int currentDist = 0; //
int Direct[][2] = {{0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}}; //
//
//
//
vector
vPointsGradient; //
for (int col = 0; col < height; col ++)
{
for (int row = 0; row < width; row ++)
{
if (255 == (int)imgIn[col * widthStep + row])
{
continue;
}
POINT_GRADIENT point;
point.x = row;
point.y = col;
point.gradient = (int)imgIn[col * widthStep + row];
vPointsGradient.push_back(point);
}
}
sort(vPointsGradient.begin(), vPointsGradient.end(), cmp);
//
//
//
unsigned int nCurGradient; //
vector
vPointsCurGrad; //
int iPoint = vPointsGradient.size() - 1; //
nCurGradient = vPointsGradient[iPoint].gradient; //
for ( ; iPoint >= 0; iPoint --) //
{
if (nCurGradient == vPointsGradient[iPoint].gradient) //
{
vPointsCurGrad.push_back(vPointsGradient[iPoint]);
continue;
}
// >>>nGradient
//
//
//
POINT_GRADIENT p ; //
POINT_GRADIENT p_; // p
queue
fifoQue;
for (int iPoint = 0; iPoint < vPointsCurGrad.size(); iPoint ++) //
{
p = POINT_GRADIENT(vPointsCurGrad[iPoint].x, vPointsCurGrad[iPoint].y,
vPointsCurGrad[iPoint].gradient); //
imgOut[p.x + p.y * widthStep] = MASK;
bool flag = false; // p flagtrue
for (int iDirect = 0; iDirect < 8; iDirect ++)
{
// p_ p
p_.x = p.x + Direct[iDirect][0];
p_.y = p.y + Direct[iDirect][1];
if (p_.x < 0 || p_.x >= width || p_.y < 0 || p_.y >= height)
{
continue;
}
p_.gradient = (int)imgIn[p_.x + p_.y * widthStep];
if (imgOut[p_.x + p_.y * widthStep] > 0 || imgOut[p_.x + p_.y * widthStep] == WSHED)
{
flag = true;
break;
}
}
if (flag)
{ /* p */
imgDist[p.x + p.y * widthStep] = 1;
fifoQue.push(p);
}
}
/* fifoQue1 n+1,n */
POINT_GRADIENT fictPoint = POINT_GRADIENT(0, 0, 256); // fictitious_pixel ,
currentDist = 1;
fifoQue.push(fictPoint);
while (1) // repeat indefinitely
{
p = fifoQue.front();
fifoQue.pop();
if (p.gradient == fictPoint.gradient) // if p = fictPoint
{ /* bfs */
if (fifoQue.empty())
break;
else
{
fifoQue.push(fictPoint);
currentDist += 1; // bfs ,
p = fifoQue.front();
fifoQue.pop();
}
}
//>>>
for (int iDirect = 0; iDirect < 8; iDirect ++)
{
// p_ p
p_.x = p.x + Direct[iDirect][0];
p_.y = p.y + Direct[iDirect][1];
if (p_.x < 0 || p_.x >= width || p_.y < 0 || p_.y >= height)
{
continue;
}
p_.gradient = (int)imgIn[p_.x + p_.y * widthStep];
if (imgDist[p_.x + p_.y * widthStep] < currentDist &&
(imgOut[p_.x + p_.y * widthStep] > 0 || imgOut[p_.x + p_.y * widthStep] == WSHED))
{ /* p_ */
if (imgOut[p_.x + p_.y * widthStep] > 0) // p_
{
if (imgOut[p.x + p.y * widthStep] == MASK ||
imgOut[p.x + p.y * widthStep] == WSHED)
{ /* p */
imgOut[p.x + p.y * widthStep] = imgOut[p_.x + p_.y * widthStep];
}
else if(imgOut[p.x + p.y * widthStep] != imgOut[p_.x + p_.y * widthStep])
{ /* p p_ */
imgOut[p.x + p.y * widthStep] = WSHED; //
}
}
else // p_
{
if (imgOut[p.x + p.y * widthStep] == MASK)
{ /* p */
imgOut[p.x + p.y * widthStep] = WSHED; //
}
}
}
else if (imgOut[p_.x + p_.y * widthStep] == MASK &&
imgDist[p_.x + p_.y * widthStep] == 0)
{
imgDist[p_.x + p_.y * widthStep] = currentDist + 1;
fifoQue.push(p_);
}
}
//<<<
}
//
//
//
for (int iPoint = 0; iPoint < vPointsCurGrad.size(); iPoint ++) //
{
p = POINT_GRADIENT(vPointsCurGrad[iPoint].x, vPointsCurGrad[iPoint].y,
vPointsCurGrad[iPoint].gradient); //
imgDist[p.x + p.y * widthStep] = 0; /* p 0 */
if (imgOut[p.x + p.y * widthStep] == MASK)
{
currentNum += 1; //
fifoQue.push(p);
imgOut[p.x + p.y * widthStep] = currentNum;
//
POINT_GRADIENT pt; //
while (! fifoQue.empty())
{
pt = fifoQue.front();
fifoQue.pop();
POINT_GRADIENT pt_; // pt
for (int iDirect = 0; iDirect < 8; iDirect ++)
{
pt_.x = pt.x + Direct[iDirect][0];
pt_.y = pt.y + Direct[iDirect][1];
if (pt_.x < 0 || pt_.x >= width || pt_.y < 0 || pt_.y >= height)
{
continue;
}
pt_.gradient = (int)imgIn[pt_.x + pt_.y * widthStep];
if (pt_.gradient != pt.gradient)
{
continue;
}
if (imgOut[pt_.x + pt_.y * widthStep] == MASK)
{
fifoQue.push(pt_);
imgOut[pt_.x + pt_.y * widthStep] = currentNum;
}
}
}
}
}
// <<
nCurGradient = vPointsGradient[iPoint].gradient;
vPointsCurGrad.clear();
vPointsCurGrad.push_back(vPointsGradient[iPoint]);
}
basinCount = currentNum;
for (int col = 0; col < height; col ++)
{
for (int row = 0; row < width; row ++)
{
if (imgOut[col * widthStep + row] == 0) imgOut[col * widthStep + row] = 255;
imgIn[col * widthStep + row] = (uchar)imgOut[col * widthStep + row];
}
}
return true;
}
联系我们
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-21:00
微信:codinghelp
热点文章
更多
辅导 comm2000 creating socia...
2026-01-08
讲解 isen1000 – introductio...
2026-01-08
讲解 cme213 radix sort讲解 c...
2026-01-08
辅导 csc370 database讲解 迭代
2026-01-08
讲解 ca2401 a list of colleg...
2026-01-08
讲解 nfe2140 midi scale play...
2026-01-08
讲解 ca2401 the universal li...
2026-01-08
辅导 engg7302 advanced compu...
2026-01-08
辅导 comp331/557 – class te...
2026-01-08
讲解 soft2412 comp9412 exam辅...
2026-01-08
讲解 scenario # 1 honesty讲解...
2026-01-08
讲解 002499 accounting infor...
2026-01-08
讲解 comp9313 2021t3 project...
2026-01-08
讲解 stat1201 analysis of sc...
2026-01-08
辅导 stat5611: statistical m...
2026-01-08
辅导 mth2010-mth2015 - multi...
2026-01-08
辅导 eeet2387 switched mode ...
2026-01-08
讲解 an online payment servi...
2026-01-08
讲解 textfilter辅导 r语言
2026-01-08
讲解 rutgers ece 434 linux o...
2026-01-08
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 99515681 微信:codinghelp
© 2024
www.7daixie.com
站长地图
程序辅导网!