Thank you so much for all these details.
It seems to be working well now.

Thanks a lot.

Le mardi 29 avril 2014 09:31:49 UTC+1, Rashad a écrit :
>
> 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]<javascript:>
> > 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()->Ge
>>>>>>>> tPixel(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]<javascript:>
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> 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] <javascript:>.
>> 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