/usr/include/ossim/base/ossimNBandLutDataObject.h is in libossim-dev 2.2.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 | //*******************************************************************
// Copyright (C) 2005 Garrett Potts
//
// LICENSE: MIT See top level license file.
//
// Author: Garrett Potts
//
//*************************************************************************
// $Id: ossimNBandLutDataObject.h 19732 2011-06-06 22:24:54Z dburken $
#ifndef ossimNBandLutDataObject_HEADER
#define ossimNBandLutDataObject_HEADER 1
#include <ossim/base/ossimObject.h>
#include <ossim/base/ossimFilename.h>
#include <iostream>
#include <map>
/**
* class ossimNBandLutDataObject
*
* Sample CADRG LUT taken from an arbitrary CADRG image entry. This is a keywordlist
* support by the loadstate of this class.
*
* <pre>
* entry0: 25 39 116
* entry1: 245 242 242
* entry10: 92 89 115
* entry100: 74 55 85
* entry101: 233 165 53
* entry102: 75 2 4
* entry103: 162 118 42
* entry104: 233 159 130
* entry105: 189 129 40
* entry106: 154 109 66
* entry107: 145 97 85
* entry108: 121 86 31
* entry109: 238 151 118
* entry11: 52 31 76
* entry110: 239 167 42
* entry111: 236 137 100
* entry112: 179 112 88
* entry113: 92 37 33
* entry114: 121 66 24
* entry115: 120 133 151
* entry116: 76 92 192
* entry117: 36 50 117
* entry118: 57 75 191
* entry119: 125 45 50
* entry12: 235 217 204
* entry120: 102 65 81
* entry121: 172 148 199
* entry122: 204 145 95
* entry123: 81 19 5
* entry124: 91 4 1
* entry125: 109 54 31
* entry126: 137 114 118
* entry127: 230 150 52
* entry128: 82 38 87
* entry129: 190 120 76
* entry13: 244 218 172
* entry130: 170 109 45
* entry131: 95 20 22
* entry132: 150 80 61
* entry133: 225 122 82
* entry134: 122 37 16
* entry135: 146 88 49
* entry136: 122 94 122
* entry137: 230 135 63
* entry138: 137 73 75
* entry139: 119 46 29
* entry14: 189 167 141
* entry140: 190 142 128
* entry141: 242 216 187
* entry142: 176 125 95
* entry143: 193 117 143
* entry144: 19 0 0
* entry145: 12 1 42
* entry146: 24 4 26
* entry147: 38 40 52
* entry148: 8 24 175
* entry149: 40 23 45
* entry15: 245 213 142
* entry150: 39 11 58
* entry151: 10 0 22
* entry152: 236 148 41
* entry153: 101 41 11
* entry154: 230 113 67
* entry155: 148 44 46
* entry156: 225 144 133
* entry157: 115 2 13
* entry158: 159 79 49
* entry159: 164 95 33
* entry16: 246 241 205
* entry160: 97 6 22
* entry161: 175 90 133
* entry162: 112 23 20
* entry163: 105 22 6
* entry164: 148 59 33
* entry165: 215 118 104
* entry166: 211 122 41
* entry167: 233 129 34
* entry168: 153 73 25
* entry169: 208 102 39
* entry17: 240 215 89
* entry170: 206 101 133
* entry171: 229 113 96
* entry172: 127 16 25
* entry173: 224 104 28
* entry174: 171 76 74
* entry175: 221 94 78
* entry176: 229 86 94
* entry177: 213 80 57
* entry178: 161 44 36
* entry179: 155 54 19
* entry18: 115 92 157
* entry180: 130 25 5
* entry181: 150 29 24
* entry182: 198 54 34
* entry183: 224 61 70
* entry184: 213 82 37
* entry185: 186 28 31
* entry186: 200 64 15
* entry187: 110 2 2
* entry188: 195 38 12
* entry189: 151 6 8
* entry19: 160 163 37
* entry190: 193 13 10
* entry191: 205 1 3
* entry192: 44 62 193
* entry193: 35 14 16
* entry194: 15 30 118
* entry195: 28 47 189
* entry196: 25 3 80
* entry197: 7 16 118
* entry198: 33 10 6
* entry199: 39 24 95
* entry2: 216 212 237
* entry20: 38 29 21
* entry200: 82 58 159
* entry201: 55 29 142
* entry202: 33 4 23
* entry203: 17 14 36
* entry204: 58 26 41
* entry205: 11 13 14
* entry206: 74 87 85
* entry207: 50 60 41
* entry208: 119 123 98
* entry209: 193 187 172
* entry21: 208 202 156
* entry210: 124 126 128
* entry211: 47 68 84
* entry212: 110 119 60
* entry213: 63 145 121
* entry214: 154 166 147
* entry215: 107 156 104
* entry22: 242 202 152
* entry23: 168 148 140
* entry24: 31 22 25
* entry25: 245 205 114
* entry26: 245 191 137
* entry27: 175 161 172
* entry28: 17 6 11
* entry29: 172 170 137
* entry3: 247 230 113
* entry30: 51 27 20
* entry31: 239 210 73
* entry32: 185 176 129
* entry33: 35 2 13
* entry34: 60 52 51
* entry35: 101 78 70
* entry36: 141 124 101
* entry37: 206 184 107
* entry38: 244 174 106
* entry39: 82 98 136
* entry4: 246 231 132
* entry40: 190 191 239
* entry41: 241 188 161
* entry42: 67 51 38
* entry43: 244 184 122
* entry44: 211 201 142
* entry45: 61 27 16
* entry46: 182 182 82
* entry47: 243 188 87
* entry48: 86 83 60
* entry49: 61 40 43
* entry5: 204 198 166
* entry50: 146 141 93
* entry51: 44 4 4
* entry52: 231 210 51
* entry53: 85 74 39
* entry54: 197 169 127
* entry55: 182 151 60
* entry56: 121 98 73
* entry57: 243 182 145
* entry58: 58 18 21
* entry59: 241 157 91
* entry6: 2 0 2
* entry60: 59 4 1
* entry61: 155 162 223
* entry62: 154 133 80
* entry63: 73 21 16
* entry64: 195 183 116
* entry65: 76 51 29
* entry66: 234 181 63
* entry67: 58 59 98
* entry68: 42 22 79
* entry69: 134 143 219
* entry7: 204 204 239
* entry70: 106 117 205
* entry71: 48 65 117
* entry72: 63 54 117
* entry73: 125 93 62
* entry74: 137 138 41
* entry75: 104 68 59
* entry76: 113 99 41
* entry77: 76 30 11
* entry78: 239 184 48
* entry79: 161 129 98
* entry8: 31 4 66
* entry80: 241 170 126
* entry81: 145 109 105
* entry82: 207 163 116
* entry83: 79 41 40
* entry84: 175 138 41
* entry85: 10 0 56
* entry86: 180 151 77
* entry87: 72 12 24
* entry88: 242 154 105
* entry89: 91 26 15
* entry9: 246 238 162
* entry90: 160 118 53
* entry91: 228 166 141
* entry92: 231 160 69
* entry93: 61 2 11
* entry94: 132 83 60
* entry95: 86 46 24
* entry96: 243 143 86
* entry97: 108 60 46
* entry98: 109 76 38
* entry99: 96 86 84
* null_value: -1
* number_bands: 3
* number_entries: 216
* scalar_type: ossim_uint8
* type: ossimNBandLutDataObject
*
*
* NOTES:
*
* - The null_value keyword above is the index in the lut that correspnds to an invalid pixel value.
* - Each entry will have number_bands. SO if number of bands is 3 then there will be 3 values
* Where the first value is for band 1, ... etc.
* - scalar_type is a hint as to the scalar type of the entries. Is the resulting lut for 8 bit, 16 bit , etc data.
* - You should always use the LUT_ENTRY_TYPE when getting values from the lut. This value could change to an
* ossim_float32 precision and if you use the LUT_ENTRY_TYPE then your code will not have to change.
*
* </pre>
*/
class OSSIM_DLL ossimNBandLutDataObject : public ossimObject
{
public:
typedef ossim_int32 LUT_ENTRY_TYPE;
friend std::ostream& operator <<(std::ostream& out,
const ossimNBandLutDataObject& lut);
/*!
* Will allocate 256 values for the color table
*/
ossimNBandLutDataObject(ossim_uint32 numberOfEntries=0,
ossim_uint32 numberOfBands=0,
ossimScalarType bandScalarType = OSSIM_UINT8,
ossim_int32 nullPixelIndex=-1);
ossimNBandLutDataObject(const ossimNBandLutDataObject& lut);
ossimObject* dup()const
{
return new ossimNBandLutDataObject(*this);
}
void create(ossim_uint32 numberOfEntries,
ossim_uint32 numberOfBands=3);
const LUT_ENTRY_TYPE* operator[](ossim_uint32 idx)const
{
if(theLut)
{
return &theLut[idx*theNumberOfBands];
}
return 0;
}
LUT_ENTRY_TYPE* operator[](ossim_uint32 idx)
{
if(theLut)
{
return &theLut[idx*theNumberOfBands];
}
return 0;
}
const LUT_ENTRY_TYPE* operator[](ossim_int32 idx)const
{
if(theLut)
{
return &theLut[idx*theNumberOfBands];
}
return 0;
}
LUT_ENTRY_TYPE* operator[](ossim_int32 idx)
{
if(theLut)
{
return &theLut[idx*theNumberOfBands];
}
return 0;
}
const LUT_ENTRY_TYPE* operator[](double normalizedIndex)const
{
int idx = int(normalizedIndex*theNumberOfEntries);
if (idx < 0)
{
idx = 0;
}
return (*this)[idx];
}
/**
* @param normalizedIndex If a double precision value is passed in then it is
* assumed to be in normalized space where the value ranges from 0.0 to 1.0
* @return the starting address of the band values.
*/
LUT_ENTRY_TYPE* operator[](double normalizedIndex)
{
ossim_uint32 idx = int(normalizedIndex*(theNumberOfEntries-1));
if (idx >= theNumberOfEntries)
{
idx = theNumberOfEntries-1;
}
return (*this)[idx];
}
bool hasNullPixelIndex()const
{
return (theNullPixelIndex >= 0);
}
/**
* Will return the min max value for a given band
*
* @param band band number to query. This is 0 based so the first band
* is indicated by the value of 0.
* @param minValue is the minimum value returned for the passed in band
* @param maxValue is the maximum value returned for the passed in band
*/
void getMinMax(ossim_uint32 band,
LUT_ENTRY_TYPE& minValue,
LUT_ENTRY_TYPE& maxValue);
/**
* @return First index with alpha of 0 or -1 if not found or there is no alpha.
*
* Currently only works on 4 band data. May consider adding an alpha channel
* class data member in the future.
*/
ossim_int32 getFirstNullAlphaIndex() const;
/**
* Allows you to specify which entry is to be designated as an invalid
* entry. Note: setting this to -1 indicates no null entry is set.
*
* @param idx is the entry number that will be used for the null value
*/
void setNullPixelIndex(ossim_int32 idx){theNullPixelIndex = idx;}
/**
* @return Return either a positive value indicating the entry designated for
* a null pixel value or a -1 to say no null pixel has been designated
* yet.
*/
ossim_int32 getNullPixelIndex()const{return theNullPixelIndex;}
/**
* @return Return the number of bands this lut is indexed for.
*/
ossim_uint32 getNumberOfBands()const{return theNumberOfBands;}
/**
* @return Return the number of entries in the lut.
*/
ossim_uint32 getNumberOfEntries()const{return theNumberOfEntries;}
/**
* This method gives you a way to find an entry index closest to the passed in
* band values.
*
* @param values Is an array of band values. This array must be equal to the number
* of bands for the lut.
* @return Returns the nearest index to the passed in value.
*/
ossim_uint32 findIndex(ossim_int32* values) const;
/**
* @brief This method gives you a way to find an entry index closest to the
* passed in band values.
*
* @param values Is an array of band values.
* @param size Size of values array. Note if size is less than the LUT
* number of bands, the trailing bands get dropped. This allows finding
* an index dropping the alpha channel.
*
* @return Returns the nearest index to the passed in value.
*/
ossim_uint32 findIndex(ossim_int32* values, ossim_uint32 size) const;
/**
* Will do a simple memset to '\0' all
*/
void clearLut();
/**
* does a deep copy from the passed in lut to the object.
*
* @param lut The lut to copy.
*/
const ossimNBandLutDataObject& operator =(const ossimNBandLutDataObject& lut);
/**
* Determines if the state of this lut is identical to the passed in lut
*
* @param lut Checks equality of the this object to the lut parameter.
* @return True if equal and false otherwise
*/
bool operator ==(const ossimNBandLutDataObject& lut)const;
/**
* Reads in an external lut file. The external file is in a keywordlist format specified by the saveState.
*/
bool open(const ossimFilename& lutFile);
/**
* <pre>
*
* Keywords:
*
* entry0:
* entry1:
* :
* entry<number_entries-1>:
* null_value: -1
* number_bands: 3
* number_entries: 216
* scalar_type: ossim_uint8
* type: ossimNBandLutDataObject
*
* Where entry<idx> is repeasted for each entry number where idx start from 0 and goes to number_entries-1
* each entry must have number_bands values.
* </pre>
*
* @param kwl The keyword list to store the keywords to. Each keyword could be prefixed by an optional
* prefix parameter.
* @param prefix The optional prefix parameter used to prefix each keyword.
*
*/
virtual bool saveState(ossimKeywordlist& kwl, const char* prefix=0)const;
std::vector<ossimString> getEntryLabels(ossim_uint32 band);
void setEntryLables(ossim_uint32 band, std::vector<ossimString> entryLabels);
/**
* Loads the state of the object by reading in the keywords listed in the save state.
*
* @param kwl The keywordlist to extract the classes keywords from to restore its state.
* @param prefix Optional prefix value used to prefix each keyword.
*/
virtual bool loadState(const ossimKeywordlist& kwl, const char* prefix=0);
protected:
virtual ~ossimNBandLutDataObject();
LUT_ENTRY_TYPE *theLut;
ossim_uint32 theNumberOfEntries;
ossim_uint32 theNumberOfBands;
ossimScalarType theBandScalarType;
ossim_int32 theNullPixelIndex;
std::map<ossim_uint32, std::vector<ossimString> > m_entryLabels;
TYPE_DATA
};
#endif
|