#include "HxSF.h"
Go to the source code of this file.
Functions | |
HxImageRep L_HXIMAGEREP | HxRegionalMaxima (HxImageRep im, int conn) |
-function y=mmregmax_equ( f, bc) if (isa(f,'uint8')) k = 255; else k = 65535; fplus = mmaddm(f,1); g = mmsubm(fplus,mminfrec(f,fplus,bc)); y = mmunion(mmthreshad(g,1),mmthreshad(f,k));. More... |
|
-function y=mmregmax_equ( f, bc) if (isa(f,'uint8')) k = 255; else k = 65535; fplus = mmaddm(f,1); g = mmsubm(fplus,mminfrec(f,fplus,bc)); y = mmunion(mmthreshad(g,1),mmthreshad(f,k));.
00037 { 00038 HxImageRep res; 00039 00040 00041 //in this list I put the labels representing regional maxima 00042 //this list will be used in a LUT 00043 //here the lut 00044 vector<int> regMaxList; 00045 // regMaxList.clear(); 00046 00047 BasicFeaturesList bfl=HxGetBlobFeatures(im, res, conn, 0); 00048 HX_COUT << "bfl size=" << bfl.size() << STD_ENDL; 00049 for(int ix=0;ix<bfl.size();ix++) 00050 { 00051 //this function works for gray images, not for color 00052 int cval = bfl[ix]->val.x(); 00053 //now check if the the current value is the minimum among the neighbours 00054 //now find the gray value of that neighbor 00055 int nval; 00056 int maxnval=-1; 00057 for(int i=0;i<bfl[ix]->neighbors.size();i++) 00058 { 00059 nval=bfl[ix]->neighbors[i]->val.x(); 00060 if(nval>maxnval) 00061 maxnval=nval; 00062 } 00063 if(maxnval<cval && maxnval>=0) 00064 { 00065 regMaxList.push_back(bfl[ix]->label); 00066 // printf("cval=%3d, maxN=%3d\n",cval,maxnval); 00067 } 00068 } 00069 00070 //now make the LUT from the list of regional maxima 00071 00072 00073 std::map<int,int> lut; 00074 int i; 00075 //lut is zero everywhere except the regional maxima position 00076 //here should be from minVal to MaxVal, not from 0 to 255 00077 for(i=0;i<256;i++) 00078 lut[i]=0; 00079 00080 for(i=0;i<regMaxList.size();i++) 00081 lut[regMaxList[i]] = 255; 00082 00083 00084 res = HxLUT(res, &lut); 00086 HX_COUT << "nr of regional Maxima blobs=" << regMaxList.size() << STD_ENDL; 00087 return res; 00088 } |