Paper: Use of digital webcam images to track spring green-up in a deciduous broadleaf forest

Comments:

  1. On thing that caught my eye was the way that they used the color channels.  They calculated an index based on the green spectrum: (2*Green) – (Red+Blue).  In the figures they published it gave a really good measure of the green-up of the measured forest.  This could be used in the initial segmenting of the images.  We could use a model based on this color normalization to segment the green patches from the non-green patches :).
  2. In the context of measuring NDVI-like values with digital cameras, this paper does not try to use digital imagery for NDVI measurements.  It’s using the images to measure phenological happenings.
  3. It does compares the behavior of NDVI with digital camera measurements in light of known phenological happenings.  It states similarities and differences and possible explanations.
  4. The paper makes a good defense of detecting phenological happenings with digital cameras.  But notice that we are trying to go a bit further than just measuring the amount of green in a ROI.  We are trying to detect individuals in plots.
Updates:
  1. May 12: (About comment 1).  I completely missed an additional way of combining the color channels.  The thing with the “2G-(R+B)” is that it is very sensitive to brightness, according to Richardson.  What was done to correct for brightness sensitivity was to use a channel percentage measure within the ROI.  Chanel%=sum(channel)/(sum(R)+sum(G)+sum(B)).  This, Richardson says “eliminated the variability associated with overall brightness”
  2. May 12: Another comment that caught my eye on the second read was the fact that Richardson did not see any new insight from a normalized 2G_RBi  measurement. He does not give an equation for the normalized 2G_RBi.
Posted in papers, PhD | 4 Comments

Paper: Point sampling digital imagery with ‘samplepoint’.

This paper describes a computer aided method to calculate coverage.  Note that the methodology exposed is not automated, it is a piece of software that helps in “manually” identifying sections (pixels) of an image.  These identified pixels are then translated into a percent of object occurrence.  For our purposes, this paper does not seem to have any prior work related to what we are trying to do.

Posted in Uncategorized | Leave a comment

Paper: Use of networked digital camera to estimate net CO2 uptake of desiccation-tolerant moss.

Though this paper is directly related to the use of digital camera in plant ecological studies, it is more focused in the correlation between the data from the digital camera and the measurement of photosynthesis.  Since the objective was this correlation it did not need to focus on shape nor texture of the plant.

It does not touch on any classification issues, but it has a very interesting approach on how to compare measurements taken in the lab to measurements taken in the field.  Could be something we could on our digital camera NDVI experiments.

Posted in papers, PhD | Leave a comment

Paper: Using digital photographs and object-based image analysis to estimate percent ground cover in vegetation plots

Genera setup: They used eCognition for image recognition; Kodak DC4800; 2 square meter plots; 1.5 meters above the ground with a 90 degree angle (as opposed to the 45 degree in the digital repeat photography paper); 3.1 megapixels; Used automatic settings for lighting and shutter speed; The analysis took 14 minutes per picture (but they did not specify the size of the images); The used JPEG for the image format.

Comments:

  1. The image processing part is explained at high-level.  An image recognition software called eCognition was used for the image processing tasks.  The process involved 2 steps: 1. image segmentation and 2. image classification.  The segmentation was based scale (level of heterogeneity of resulting segments), shape (smoothness, compactness) and colour.  They tweaked relative parameters for the image segmentation.  The classification was done by “fuzzy logic”.  The lack of detail is probably because they used a third-party software.
  2. Though the specific image recognition tasks are not thoroughly described, it sets a precedent in segmenting an image to find relative types of ground cover.  I think we can use a similar technique to reduce the search space in our solution.  We can run a segmentation algorithm that will separate the regions of the image were the flowers have a higher probability to be found.
  3. They were able to classify specific objects (blades of grass).  No information is given as to how this was achieved
  4. They use the Kappa Index of Agreement to assess error.  Have not seen these type of error estimation in machine learning.  (have to look into this)
Posted in papers, PhD | Leave a comment

Paper: Monitoring Plant Phenology Using Digital Repeat Photography.

Additional Measurements: Soil moisture, temperature, air temperature, relative humidity, Solar radiation flux (with a pyranometer), amount of precipitation, from the RGB the calculated “amount of greenness”, percent aerial cover of plants with SamplePoint (Some kind of software, I have to look into this)

General Setup: 6.1 megapixel camera; Nikon D70 digital single lens reflex camera; camera at a height of 2m pointing at the plot with a 45 degree angle;  The camera was continuously powered and connected to a laptop that controlled it; picture every hour; Camera was set on “auto” to allow f-stop and shutter adjustments; camera’s focal length was set to 0.67mm, this gave a set pixel resolution.

Image Processing: The object classification depends on colour thresholding.  The different thresholds were chosen “by hand”.  Naturally, HSV was chosen for the image format. The ?Matlab routine “euler” allowed them to go from pixels to discrete flower elements. It states that it used the “clean”, “majority” and “close” Matlab routines, but when I searched for these routines on my Matlab 7.9.0.529 (R2009b) I did not find them.  If they used some non-standard Matlab package, they did not mention it.  It is mentioned that confusion arises when two flowers have same colour.

Comments:

  1. While the paper mentions confusion from flowers of the same colour, it does not address the case where the element that is being classified does not have “good” contrast with the background.  They DID modify the saturation threshold for one type of flower, but this does not address the issue in general.
  2. The HSV values were examined “manually” to determine the threshold.  Not sure how this was done but an automated process based on minimizing the variance between “positive” and “negative” pixels would be more general.
  3. It made a really cool argument about repeat photography as phenological tool: “Compared with repeated manual visual observations, this approach is inexpensive once the initial investment in camera equipment has been made.”
  4. It points out that occlusion is one of the drawbacks from repeat photography.  It goes on to say that it might be best to have a combination of repeat photography and field observations.
  5. They mention that the greenness index used worked well in direct sun light, but presented anomalous behaviour in shade.  The propose this to be a good research area.

This paper gives a general direction that I believe is close to where we are headed.  Furthermore, I think we have a lot to offer in terms of Classification, logging and information retrieval techniques.

Posted in papers, PhD | Leave a comment

Annotating for HOG Based detecting

When we did the annotation process for the Zackenberg flower pictures I insisted in annotating the WHOLE flower.  In my mind, the more information we gave the algorithm, the better it would perform.  This means that we have some annotations that contain flowers in strange positions.  For example we have annotation with flowers that are in a half-moon position.  In this case the flower is contained in the corners of the annotation and the middle is “background”.  Actually, in some annotation, given the position of the flower, most of the information is background.

Reading Navneet Dalal’s paper and thesis on Histogram of Oriented Gradients I realized that on of the assumptions of the whole process is that the element that is being detected – pedestrians in Navneet Dalal’s case and flowers in mine should be more – should occupy more or less the same place in all annotations.  In the case of pedestrian detection, all were in an upright position.

All this leads me to believe that we should be careful when doing annotations for the flowers.  We should strive to “normalize” the way the flower appears in the annotation.  So, instead of annotating the “half-moon” flower once, we can annotate it twice trying to keep each sub-annotation in the centre.  For now, this is just a hunch. I’ll test with both types of annotation and see what the results are.

Posted in annotation, PhD | Leave a comment

R: Efficient data loading

I’m working with the HOG_01 directory from this dataset.  They have organized so that each data point is a 1568 line text file.  The data sets are also separated in 43 types.  Unzip the data and you will see what I am talking about.

After reading a post on my Machine learning class blog I came up with a script that managed to execute in 1m8s.  The script outputs a file that is created with R’s ‘save’ command.  Here is the code:

cat > space <<EOF
EOF
find $1 -type f -name *.txt -exec cat {} space \; | tr -s "\r\n" " " >> matrix.out
rm -f space
R -e "HOG_01 = scan('matrix.out'); \
      dim(HOG_01) <- c(26640, 1568); \
      save(HOG_01,file='matrix.RData');"
rm -f matrix.out

The space is a hack that I used to put a space separator at the end of each data set (because the text files did not end with a line break character).  The create file is very compact and takes a couple of seconds to load to R.  Note that you must use load to load the data from file.

load("matrix.RData");
Posted in commands, PhD, R | Leave a comment

R filter rows based on an element

I need to separate a matrix based on the existence of an element in a row.  I will end up with two matrices: the first will not contain the element on any of its rows and the second will contain the element in all its rows.

I first use apply to get the row indices, and then I create new matrices based on those indices.  Here are the commands:

oi = apply(tr, 1, function(row) any(1 %in% row));
1 = matrix ( data=c(tr[,1:2][oi]), ncol=2 );
2 = matrix ( data=c(tr[,1:2][!oi]), ncol=2 );

Note that the “tr” in the first line is my original matrix.  And “oi” is the is  logical vector containing TRUE if element (in this case 1) is in the row and FALSE otherwise.  Since I only want the first two columns of the matrix I use [,1:2] as my index.

Posted in PhD, R | Leave a comment

Remove defined variables from R environment

When I am debugging a piece of code I usually do it inside the R-terminal.  It’s nice to do things this way because you can poke at things when something goes wrong.  The only disadvantage is that you mush “refresh” the environment before re-executing.  I used to quit and re-enter.  I found a cool command that does what I want within the R environment:

rm(list = ls(all = TRUE))
Posted in PhD, R | Leave a comment

opencv add padding

I was surprised that this function was so difficult to find.  I googled with the title of this post and did not find any real solution to what I was looking for.  I just want to add some pixels of padding to my image.  With this post I hope to make life a bit easier for ppl that are looking to do the same.

The function you are looking for is cv::copyMakeBorder :)

Posted in opencv | 1 Comment