Hi,

You are missing a call to filter's Update() method. Read software guide.
http://www.orfeo-toolbox.org/SoftwareGuide/SoftwareGuidech6.html

try this

  /* Added code */
  OutputImageType::IndexType pixelIndex;
  pixelIndex[0] = 0;
  pixelIndex[1] = 0;
  cloudDetection->Update();
  unsigned short int pixelValue;
  for (int i = 0; i < 4; i++) {
pixelValue = cloudDetection->GetInput()->GetPixel(pixelIndex)[i];
 std::cout << "GetPixel[" << i << "] = " << pixelValue << std::endl;
  }
  /* End added code */



Also the best way is not to hard code the number of bands. Use
GetNumberOfComponentsPerPixel. Documentation is here -
http://www.orfeo-toolbox.org/doxygen-current/classitk_1_1VectorImage.html#afa725cbdf81370b5bb373a938fa2e629

Ideally your for loop looks like:
  for (int i = 0; i
< cloudDetection->GetInput()->GetNumberOfComponentsPerPixel(); i++) {
..

}

You are using a forked copy of OTB in github. Well I am not aware of any
particular reason to avoid mercurial version of OTB-
http://hg.orfeo-toolbox.org/OTB. This is where all commits are done.


On Tue, Apr 29, 2014 at 10:03 AM, OTB Florian <[email protected]> wrote:

> I can't access pastebin so I paste the code here.
>
>
> #include "otbCloudDetectionFunctor.h"
> #include "otbCloudDetectionFilter.h"
>
> #include "itkMacro.h"
> #include "otbImage.h"
> #include "otbVectorImage.h"
> #include "otbImageFileReader.h"
> #include "otbImageFileWriter.h"
> #include "itkRescaleIntensityImageFilter.h"
> #include "otbVectorRescaleIntensityImageFilter.h"
> #include "otbMultiChannelExtractROI.h"
>
> int main(int argc, char * argv[])
> {
>
>   if (argc != 12)
>     {
>     std::cerr << "Usage: " << argv[0];
>     std::cerr <<
>     "inputFileName outputFileName printableInputFileName
> printableOutputFileName";
>     std::cerr <<
>     "firstPixelComponent secondPixelComponent thirdPixelComponent
> fourthPixelComponent ";
>     std::cerr << "variance ";
>     std::cerr << "minThreshold maxThreshold " << std::endl;
>     return EXIT_FAILURE;
>     }
>
>   const unsigned int Dimension = 2;
>
>   typedef double InputPixelType;
>   typedef double OutputPixelType;
>
>   typedef otb::VectorImage<InputPixelType, Dimension> VectorImageType;
>   typedef VectorImageType::PixelType                  VectorPixelType;
>   typedef otb::Image<OutputPixelType, Dimension>      OutputImageType;
>
>   typedef otb::Functor::CloudDetectionFunctor<VectorPixelType,
>       OutputPixelType>   FunctorType;
>
>   typedef otb::CloudDetectionFilter<VectorImageType, OutputImageType,
>       FunctorType> CloudDetectionFilterType;
>
>   typedef otb::ImageFileReader<VectorImageType> ReaderType;
>   typedef otb::ImageFileWriter<OutputImageType> WriterType;
>
>   ReaderType::Pointer               reader = ReaderType::New();
>   CloudDetectionFilterType::Pointer cloudDetection =
>     CloudDetectionFilterType::New();
>   WriterType::Pointer writer = WriterType::New();
>
>   reader->SetFileName(argv[1]);
>   cloudDetection->SetInput(reader->GetOutput());
>
>   /* Added code */
>   OutputImageType::IndexType pixelIndex;
>   pixelIndex[0] = 0;
>   pixelIndex[1] = 0;
>   unsigned short int pixelValue;
>   for (int i = 0; i < 4; i++) {
>  pixelValue = cloudDetection->GetInput()->GetPixel(pixelIndex)[i];
> std::cout << "GetPixel[" << i << "] = " << pixelValue << std::endl;
>   }
>   /* End added code */
>
>   VectorPixelType referencePixel;
>   referencePixel.SetSize(4);
>   referencePixel.Fill(0.);
>   referencePixel[0] = (atof(argv[5]));
>   referencePixel[1] = (atof(argv[6]));
>   referencePixel[2] = (atof(argv[7]));
>   referencePixel[3] = (atof(argv[8]));
>   cloudDetection->SetReferencePixel(referencePixel);
>
>   cloudDetection->SetVariance(atof(argv[9]));
>
>   cloudDetection->SetMinThreshold(atof(argv[10]));
>   cloudDetection->SetMaxThreshold(atof(argv[11]));
>
>   writer->SetFileName(argv[2]);
>   writer->SetInput(cloudDetection->GetOutput());
>   writer->Update();
>
>   typedef otb::Image<unsigned char,
>       Dimension>
>   OutputPrettyImageType;
>   typedef otb::VectorImage<unsigned char,
>       Dimension>
>   InputPrettyImageType;
>   typedef otb::ImageFileWriter<OutputPrettyImageType>
>   WriterPrettyOutputType;
>   typedef otb::ImageFileWriter<InputPrettyImageType>
>   WriterPrettyInputType;
>   typedef itk::RescaleIntensityImageFilter<OutputImageType,
>       OutputPrettyImageType>
>   RescalerOutputType;
>   typedef otb::VectorRescaleIntensityImageFilter<VectorImageType,
>       InputPrettyImageType>
>   RescalerInputType;
>   typedef otb::MultiChannelExtractROI<InputPixelType,
>       InputPixelType>
>   ChannelExtractorType;
>
>   ChannelExtractorType::Pointer  selecter           =
> ChannelExtractorType::New();
>   RescalerInputType::Pointer     inputRescaler     =
> RescalerInputType::New();
>   WriterPrettyInputType::Pointer prettyInputWriter =
> WriterPrettyInputType::New();
>   selecter->SetInput(reader->GetOutput());
>   selecter->SetChannel(3);
>   selecter->SetChannel(2);
>   selecter->SetChannel(1);
>   inputRescaler->SetInput(selecter->GetOutput());
>   VectorPixelType minimum, maximum;
>   minimum.SetSize(3);
>   maximum.SetSize(3);
>   minimum.Fill(0);
>   maximum.Fill(255);
>   inputRescaler->SetOutputMinimum(minimum);
>   inputRescaler->SetOutputMaximum(maximum);
>   prettyInputWriter->SetFileName(argv[3]);
>   prettyInputWriter->SetInput(inputRescaler->GetOutput());
>
>   RescalerOutputType::Pointer     outputRescaler     =
> RescalerOutputType::New();
>   WriterPrettyOutputType::Pointer prettyOutputWriter =
>     WriterPrettyOutputType::New();
>   outputRescaler->SetInput(cloudDetection->GetOutput());
>   outputRescaler->SetOutputMinimum(0);
>   outputRescaler->SetOutputMaximum(255);
>   prettyOutputWriter->SetFileName(argv[4]);
>   prettyOutputWriter->SetInput(outputRescaler->GetOutput());
>
>   prettyInputWriter->Update();
>   prettyOutputWriter->Update();
>
>   return EXIT_SUCCESS;
> }
>
>
>
>
> Le mardi 29 avril 2014 08:49:12 UTC+1, Rashad a écrit :
>>
>> Hi,
>>
>> Could you post the your full code on pastebin.com ?
>>
>>
>> On Tue, Apr 29, 2014 at 9:46 AM, OTB Florian <[email protected]> wrote:
>>
>>> Thanks for your explanation.
>>> I've changed the values to 0 as you proposed but now I get a
>>> segmentation fault when calling the GetPixel() method.
>>>
>>> Le mardi 29 avril 2014 08:31:07 UTC+1, Rashad a écrit :
>>>>
>>>> Hi,
>>>>
>>>>
>>>> On Tue, Apr 29, 2014 at 9:17 AM, OTB Florian <[email protected]> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> 337300 and 7674920 are just the coordinates of the image origin I got
>>>>> with otbcli_ReadImageInfo command or by adding the line
>>>>> std::cout << cloudDetection->GetInput()->GetOrigin() << std::endl;
>>>>> in the code.
>>>>>
>>>>
>>>> This is wrong. You are confused with image pixels and image coordinates
>>>> here. What you are talking about is the projected coordinates of image.
>>>>
>>>> Image pixels starts with 0,0 is most image processing software. IIRC,
>>>> Matlab is an exception in this case. But anyway here if you are trying to
>>>> get the pixel for the entire image, the best thing is to use image
>>>> iterators which gives you efficient access to pixels.
>>>>
>>>> If you want to get a single pixel as you mentioned in your case.
>>>>
>>>> The image pixels starts with 0,0 and end with (width-1, height-1)
>>>>
>>>> pixelIndex[0] = 0
>>>> pixelIndex[1] = 0
>>>>
>>>>
>>>> And for another case if you want to get a pixel at a particular
>>>> coordinates
>>>> say you only know lat,lon -> You need to find the corresponding pixel
>>>> location based on the projection and use it.
>>>>
>>>>
>>>>>
>>>>> Le lundi 28 avril 2014 17:09:08 UTC+1, Rashad a écrit :
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>>
>>>>>> On Mon, Apr 28, 2014 at 10:49 AM, OTB Florian <[email protected]>wrote:
>>>>>>
>>>>>>> Hi Rashad,
>>>>>>>
>>>>>>> Thanks for your reply.
>>>>>>> I've tested all the examples you recommanded to me.
>>>>>>>
>>>>>>> I'm still working on the cloud detection example and always
>>>>>>> experimenting the same problem.
>>>>>>> I've just added theses code lines after cloudDetection->SetInput(
>>>>>>> reader->GetOutput()); (l.157 : https://github.com/echristophe
>>>>>>> /OTB/blob/master/Examples/FeatureExtraction/CloudDetectionEx
>>>>>>> ample.cxx) :
>>>>>>>
>>>>>>> OutputImageType::IndexType pixelIndex;
>>>>>>> pixelIndex[0] = 337300;
>>>>>>> pixelIndex[1] = 7674920;
>>>>>>> unsigned short int pixelValue;
>>>>>>> for (int i = 0; i < 4; i++) { // cause it's a 4-band image
>>>>>>>    pixelValue = cloudDetection->GetInput()->GetPixel(pixelIndex)[i];
>>>>>>>    std::cout << "GetPixel[" << i << "] = " << pixelValue <<
>>>>>>> std::endl;
>>>>>>>  }
>>>>>>>
>>>>>>>
>>>>>>> Then I get senseless values which are different at each execution.
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> How do you find the pixelIndex in the code?
>>>>>>
>>>>>> pixelIndex[0] = 337300;
>>>>>> pixelIndex[1] = 7674920;
>>>>>>
>>>>>> Could you please elaborate the calculation of  "337300" and "7674920"
>>>>>> ?
>>>>>>
>>>>>>
>>>>>>> Any idea?
>>>>>>>
>>>>>>> Thanks in advance.
>>>>>>>
>>>>>>>
>>>>>>> Le vendredi 25 avril 2014 11:11:08 UTC+1, Rashad a écrit :
>>>>>>>>
>>>>>>>> Hi OTB,
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Apr 25, 2014 at 11:50 AM, OTB Florian <[email protected]>wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Hi all!
>>>>>>>>>
>>>>>>>>> I'm new at OTB and studying some examples to become familiar with
>>>>>>>>> the library.
>>>>>>>>>
>>>>>>>>>
>>>>>>>> You might start with the first example -
>>>>>>>> http://www.orfeo-toolbox.org/SoftwareGuide/SoftwareGuidech4.html
>>>>>>>>
>>>>>>>>
>>>>>>>>> I've tried the cloud detection example (https://github.com/
>>>>>>>>> echristophe/OTB/blob/master/Examples/FeatureExtraction/
>>>>>>>>> CloudDetectionExample.cxx) with the CloudsOnReunion.tif file and
>>>>>>>>> it works very well.
>>>>>>>>> However, I'm facing some difficulties while trying to get the
>>>>>>>>> values of the different (4) bands of a pixel via the GetPixel() 
>>>>>>>>> method.
>>>>>>>>>
>>>>>>>>
>>>>>>>> Could you post some of your code which you tried?.
>>>>>>>>
>>>>>>>>
>>>>>>>>> I'm wondering the type returned by this method. In that case, I
>>>>>>>>> get an array with four values which don't mean anything (NaN or values
>>>>>>>>> around 1e-154).
>>>>>>>>> Behind this trouble is the way of encoding the band intensities.
>>>>>>>>> Is there any function to know the type of encoding, the min and max 
>>>>>>>>> of each
>>>>>>>>> band?
>>>>>>>>>
>>>>>>>>
>>>>>>>> I think you must try the examples first. Sources are available here
>>>>>>>> - http://hg.orfeo-toolbox.org/OTB/file/fc0c18977f12/Examples
>>>>>>>> /Tutorials
>>>>>>>>
>>>>>>>> [1] http://www.orfeo-toolbox.org/SoftwareGuide/SoftwareGuidech4.
>>>>>>>> html
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>> If you could help me...
>>>>>>>>>
>>>>>>>>> Thanks.
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> --
>>>>>>>>> Check the OTB FAQ at
>>>>>>>>> http://www.orfeo-toolbox.org/FAQ.html
>>>>>>>>>
>>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>>> Groups "otb-users" group.
>>>>>>>>> To post to this group, send email to [email protected]
>>>>>>>>>
>>>>>>>>> To unsubscribe from this group, send email to
>>>>>>>>> [email protected]
>>>>>>>>>
>>>>>>>>> For more options, visit this group at
>>>>>>>>> http://groups.google.com/group/otb-users?hl=en
>>>>>>>>> ---
>>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>>> Groups "otb-users" group.
>>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>>> send an email to [email protected].
>>>>>>>>>
>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Regards,
>>>>>>>>    Rashad
>>>>>>>>
>>>>>>>  --
>>>>>>> --
>>>>>>> Check the OTB FAQ at
>>>>>>> http://www.orfeo-toolbox.org/FAQ.html
>>>>>>>
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "otb-users" group.
>>>>>>> To post to this group, send email to [email protected]
>>>>>>> To unsubscribe from this group, send email to
>>>>>>> [email protected]
>>>>>>> For more options, visit this group at
>>>>>>> http://groups.google.com/group/otb-users?hl=en
>>>>>>> ---
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "otb-users" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to [email protected].
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Regards,
>>>>>>    Rashad
>>>>>>
>>>>>  --
>>>>> --
>>>>> Check the OTB FAQ at
>>>>> http://www.orfeo-toolbox.org/FAQ.html
>>>>>
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "otb-users" group.
>>>>> To post to this group, send email to [email protected]
>>>>> To unsubscribe from this group, send email to
>>>>> [email protected]
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/otb-users?hl=en
>>>>> ---
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "otb-users" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Regards,
>>>>    Rashad
>>>>
>>>  --
>>> --
>>> Check the OTB FAQ at
>>> http://www.orfeo-toolbox.org/FAQ.html
>>>
>>> You received this message because you are subscribed to the Google
>>> Groups "otb-users" group.
>>> To post to this group, send email to [email protected]
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> For more options, visit this group at
>>> http://groups.google.com/group/otb-users?hl=en
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "otb-users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> --
>> Regards,
>>    Rashad
>>
>  --
> --
> Check the OTB FAQ at
> http://www.orfeo-toolbox.org/FAQ.html
>
> You received this message because you are subscribed to the Google
> Groups "otb-users" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/otb-users?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "otb-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Regards,
   Rashad

-- 
-- 
Check the OTB FAQ at
http://www.orfeo-toolbox.org/FAQ.html

You received this message because you are subscribed to the Google
Groups "otb-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/otb-users?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"otb-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to