<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://shantanu160998.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://shantanu160998.github.io/" rel="alternate" type="text/html" /><updated>2026-04-26T23:17:13+00:00</updated><id>https://shantanu160998.github.io/feed.xml</id><title type="html">Using Stereovision for Crop Height Estimation</title><subtitle>A blog exploring the use of stereovision for automated crop height estimation.</subtitle><author><name>Shantanu Kore &amp; Jasanmol Singh.</name><email>none@example.org</email></author><entry><title type="html">Future Blog Post</title><link href="https://shantanu160998.github.io/posts/2012/08/blog-post-4/" rel="alternate" type="text/html" title="Future Blog Post" /><published>2199-01-01T00:00:00+00:00</published><updated>2199-01-01T00:00:00+00:00</updated><id>https://shantanu160998.github.io/posts/2012/08/future-post</id><content type="html" xml:base="https://shantanu160998.github.io/posts/2012/08/blog-post-4/"><![CDATA[<p>This post will show up by default. To disable scheduling of future posts, edit <code class="language-plaintext highlighter-rouge">config.yml</code> and set <code class="language-plaintext highlighter-rouge">future: false</code>.</p>]]></content><author><name>Shantanu Kore &amp; Jasanmol Singh.</name><email>none@example.org</email></author><category term="cool posts" /><category term="category1" /><category term="category2" /><summary type="html"><![CDATA[This post will show up by default. To disable scheduling of future posts, edit config.yml and set future: false.]]></summary></entry><entry><title type="html">Using Stereovision for Crop Height Estimation</title><link href="https://shantanu160998.github.io/posts/2026/04/crop-height-stereovision/" rel="alternate" type="text/html" title="Using Stereovision for Crop Height Estimation" /><published>2026-04-26T00:00:00+00:00</published><updated>2026-04-26T00:00:00+00:00</updated><id>https://shantanu160998.github.io/posts/2026/04/crop-height-stereovision</id><content type="html" xml:base="https://shantanu160998.github.io/posts/2026/04/crop-height-stereovision/"><![CDATA[<p><em>Co-authored by Jasanmol Singh (Ph.D. Student, Agriculture) and Shantanu Kore (Ph.D. Student, Bioengineering).</em></p>

<p>Crop height is a proven and crucial predictor of biomass quantity and availability. However, collecting this data in the field has historically been a bottleneck. Traditionally, researchers have relied on manual crop height measurement—a practice that is not only labor-intensive but also highly prone to fatigue and human error.</p>

<p>While modern techniques exist, they come with their own trade-offs. UAV-based Structure from Motion requires lengthy processing times, and satellite imagery often suffers from low temporal resolution, making real-time results impossible. Even ground-based methods, like ultrasound sensors, are limited because they are point-specific and fail to provide a complete spatial distribution of the crop canopy.</p>

<p>To bridge this gap, our recent project explores using <strong>Stereovision</strong> to automate and improve crop height measurement.</p>

<h3 id="the-goal">The Goal</h3>
<p>Our primary objective is to develop a system that yields pixel-level crop height results. By utilizing stereovision, we can also capture additional RGB information about the crops, which paves the way for advanced 3D structural studies and deeper growth characterization.</p>

<hr />

<h3 id="the-stereo-vision-processing-pipeline">The Stereo-Vision Processing Pipeline</h3>
<p>To achieve this, we developed a robust stereo-vision processing pipeline.</p>

<p>First, we capture synchronized images of forage quadrants using a Luxonis OAK-D Depth Camera. As shown below, the camera utilizes a center RGB sensor alongside left and right monochrome sensors separated by a $60\text{mm}$ baseline distance.</p>

<div align="center">
  <img src="/images/stereo-vision processing pipeline.JPG" alt="Luxonis OAK-D sensor layout with left/right mono and center RGB" />
  <p><em>Camera sensor architecture and disparity matrix capture.</em></p>
</div>

<p>The system calculates the horizontal pixel shift (disparity) between the left and right images. Using basic optical geometry, depth ($Z$) is calculated using the baseline distance ($T$) and the focal length ($f$).</p>

<div align="center">
  <img src="/images/DIsparity_measurement.JPG" alt="Optical geometry and mathematical execution for disparity measurement" />
  <p><em>Optical geometry and disparity calculations utilizing Normalized Cross-Correlation (NCC).</em></p>
</div>

<p>Once the raw data is captured, the automated system executes a specific processing pipeline:</p>
<ol>
  <li><strong>Depth Data Preprocessing:</strong> Generating the raw disparity map.</li>
  <li><strong>Ground Thresholding:</strong> Applying upper and lower spatial limits to isolate the crop envelope and ignore uneven ground data.</li>
  <li><strong>Automated Averaging:</strong> Aggregating the thresholded data into a singular crop height value.</li>
</ol>

<div align="center">
  <img src="/images/Automated steriovision System.JPG" alt="Automated Stereovision System Flowchart" />
  <p><em>The complete processing pipeline from data capture to performance comparison against human ground truth.</em></p>
</div>

<hr />

<h3 id="field-data-collection">Field Data Collection</h3>
<p>For ground truth comparison against our automated pipeline, we built a physical mounting rod equipped with an Emlid Reach RS+ RTK-GPS to ensure high-precision spatial tracking.</p>

<div align="center">
  <img src="/images/Mounting rod with height marking for steriovision camera.JPG" alt="Mounting rod with height markings" />
  <p><em>Fig 1: Custom mounting rod with precise length markings.</em></p>
</div>

<div align="center">
  <img src="/images/RTK-GPS.JPG" alt="Emlid Reach RS+ RTK-GPS attached to the rig" />
  <p><em>Fig 2: Emlid Reach RS+ mounted on the rod for GPS data collection.</em></p>
</div>

<p>We collected data at two different mounting heights in the field: $132\text{ cm}$ ($\sim 4\text{ ft}$) and $190\text{ cm}$ ($\sim 6\text{ ft}$).</p>

<div align="center">
  <img src="/images/Depth camera mounted On a rod.JPG" alt="Depth camera mounted on the collection rod" />
  <p><em>Fig 3: Close-up of the depth camera mounted on the collection rod.</em></p>
</div>

<div align="center">
  <img src="/images/Data Collection with depth camera and GPS.JPG" alt="Researcher operating the stereovision collection rig in the field" />
  <p><em>Fig 4: Active field data collection utilizing the depth camera and GPS rig.</em></p>
</div>

<p>To streamline this process, we developed a custom Crop Height Collector interface. This software ingests synchronized frames, allowing us to capture ground reference depth and canopy depth simultaneously alongside human manual tape measurements.</p>

<div align="center">
  <img src="/images/Data collection interface.JPG" alt="Crop Height Collector field data system interface" />
  <p><em>Fig 5: Software interface for capturing and logging ground reference and canopy depth.</em></p>
</div>

<h3 id="data-tables">Data Tables</h3>

<div align="center">
  <img src="/images/Data for 132cm-4ft measurements.JPG" alt="Data at 132 cm mounting height" />
  <p><em>Table 1: Data collected at 132 cm (~4 ft) mounting height.</em></p>
</div>

<div align="center">
  <img src="/images/Data for 190 cm - 6ft measurements.JPG" alt="Data at 190 cm mounting height" />
  <p><em>Table 2: Data collected at 190 cm (~6 ft) mounting height.</em></p>
</div>

<hr />

<h3 id="results--discussion">Results &amp; Discussion</h3>
<p>After processing the raw frames into depth heatmaps, we evaluated the system-averaged outputs against the human-averaged inputs.</p>

<div align="center">
  <img src="/images/Sample depth images for crop height measurements.JPG" alt="RGB and corresponding depth heatmaps of crop canopies" />
  <p><em>Fig 6: Sample RGB images and their corresponding depth heatmaps used for measurement.</em></p>
</div>

<p>Several interesting observations emerged from the data:</p>

<ol>
  <li><strong>System Objectivity:</strong> The crop height measured by the depth camera proved to be far more objective compared to the manual tape measure measurements.</li>
  <li><strong>Mounting Considerations:</strong> We found that relying on a manual mount height made more sense, as perfectly flat ground conditions were rarely met during data collection.</li>
  <li><strong>Human Bias in Manual Measurement:</strong> The manual crop height measurements were consistently higher than the depth camera-based measurements. Humans generally tend to measure the topmost outlier plants, ignoring the smaller plants growing beneath that also contribute to the true mean crop height.</li>
  <li><strong>Environmental Variables:</strong> We observed a negative crop height value occasionally, which was attributed to hand shaking and unwanted vibrations during the data collection process.</li>
</ol>

<h3 id="conclusion">Conclusion</h3>
<p>Depth cameras and stereovision hold immense potential for providing highly accurate crop height measurements. As long as calibration and setup are done properly, and standard conditions are maintained during the data collection procedure, this technology offers a scalable, objective alternative to manual field labor.</p>]]></content><author><name>Shantanu Kore &amp; Jasanmol Singh.</name><email>none@example.org</email></author><category term="bioengineering" /><category term="agriculture" /><category term="computer vision" /><category term="stereovision" /><summary type="html"><![CDATA[Co-authored by Jasanmol Singh (Ph.D. Student, Agriculture) and Shantanu Kore (Ph.D. Student, Bioengineering).]]></summary></entry><entry><title type="html">Blog Post number 4</title><link href="https://shantanu160998.github.io/posts/2012/08/blog-post-4/" rel="alternate" type="text/html" title="Blog Post number 4" /><published>2015-08-14T00:00:00+00:00</published><updated>2015-08-14T00:00:00+00:00</updated><id>https://shantanu160998.github.io/posts/2012/08/blog-post-4</id><content type="html" xml:base="https://shantanu160998.github.io/posts/2012/08/blog-post-4/"><![CDATA[<p>This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.</p>

<h1 id="headings-are-cool">Headings are cool</h1>

<h1 id="you-can-have-many-headings">You can have many headings</h1>

<h2 id="arent-headings-cool">Aren’t headings cool?</h2>]]></content><author><name>Shantanu Kore &amp; Jasanmol Singh.</name><email>none@example.org</email></author><category term="cool posts" /><category term="category1" /><category term="category2" /><summary type="html"><![CDATA[This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.]]></summary></entry><entry><title type="html">Blog Post number 3</title><link href="https://shantanu160998.github.io/posts/2014/08/blog-post-3/" rel="alternate" type="text/html" title="Blog Post number 3" /><published>2014-08-14T00:00:00+00:00</published><updated>2014-08-14T00:00:00+00:00</updated><id>https://shantanu160998.github.io/posts/2014/08/blog-post-3</id><content type="html" xml:base="https://shantanu160998.github.io/posts/2014/08/blog-post-3/"><![CDATA[<p>This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.</p>

<h1 id="headings-are-cool">Headings are cool</h1>

<h1 id="you-can-have-many-headings">You can have many headings</h1>

<h2 id="arent-headings-cool">Aren’t headings cool?</h2>]]></content><author><name>Shantanu Kore &amp; Jasanmol Singh.</name><email>none@example.org</email></author><category term="cool posts" /><category term="category1" /><category term="category2" /><summary type="html"><![CDATA[This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.]]></summary></entry><entry><title type="html">Blog Post number 2</title><link href="https://shantanu160998.github.io/posts/2013/08/blog-post-2/" rel="alternate" type="text/html" title="Blog Post number 2" /><published>2013-08-14T00:00:00+00:00</published><updated>2013-08-14T00:00:00+00:00</updated><id>https://shantanu160998.github.io/posts/2013/08/blog-post-2</id><content type="html" xml:base="https://shantanu160998.github.io/posts/2013/08/blog-post-2/"><![CDATA[<p>This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.</p>

<h1 id="headings-are-cool">Headings are cool</h1>

<h1 id="you-can-have-many-headings">You can have many headings</h1>

<h2 id="arent-headings-cool">Aren’t headings cool?</h2>]]></content><author><name>Shantanu Kore &amp; Jasanmol Singh.</name><email>none@example.org</email></author><category term="cool posts" /><category term="category1" /><category term="category2" /><summary type="html"><![CDATA[This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.]]></summary></entry><entry><title type="html">Blog Post number 1</title><link href="https://shantanu160998.github.io/posts/2012/08/blog-post-1/" rel="alternate" type="text/html" title="Blog Post number 1" /><published>2012-08-14T00:00:00+00:00</published><updated>2012-08-14T00:00:00+00:00</updated><id>https://shantanu160998.github.io/posts/2012/08/blog-post-1</id><content type="html" xml:base="https://shantanu160998.github.io/posts/2012/08/blog-post-1/"><![CDATA[<p>This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.</p>

<h1 id="headings-are-cool">Headings are cool</h1>

<h1 id="you-can-have-many-headings">You can have many headings</h1>

<h2 id="arent-headings-cool">Aren’t headings cool?</h2>]]></content><author><name>Shantanu Kore &amp; Jasanmol Singh.</name><email>none@example.org</email></author><category term="cool posts" /><category term="category1" /><category term="category2" /><summary type="html"><![CDATA[This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.]]></summary></entry></feed>