<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Franciso Zavala </title>
    <description>The latest articles on DEV Community by Franciso Zavala  (@fjzavala21).</description>
    <link>https://dev.to/fjzavala21</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3206880%2Fbf9b60d0-4dba-452a-900e-4278948c76e9.jpeg</url>
      <title>DEV Community: Franciso Zavala </title>
      <link>https://dev.to/fjzavala21</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fjzavala21"/>
    <language>en</language>
    <item>
      <title>Detecting Edges in Images — Why Derivatives Matter</title>
      <dc:creator>Franciso Zavala </dc:creator>
      <pubDate>Sun, 08 Jun 2025 21:54:20 +0000</pubDate>
      <link>https://dev.to/fjzavala21/detecting-edges-in-images-why-derivatives-matter-409</link>
      <guid>https://dev.to/fjzavala21/detecting-edges-in-images-why-derivatives-matter-409</guid>
      <description>&lt;p&gt;In image processing, detecting local changes — such as edges, contours, or intensity transitions — is a fundamental task. These features often reveal structure, shape, and boundaries in visual data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzw8opfjpnoeam1qum7yq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzw8opfjpnoeam1qum7yq.png" alt="Image description" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To accomplish this, high-pass filters are used to highlight abrupt changes in pixel intensity. One classic method involves applying simple derivative kernels, like the [−1, 0, 1] operator, which estimates the first derivative and emphasizes local transitions.&lt;/p&gt;

&lt;p&gt;However, there's a catch:&lt;/p&gt;

&lt;p&gt;These basic filters are extremely sensitive to noise, often detecting edges where there are none.&lt;/p&gt;

&lt;p&gt;In my latest article, I explain how to:&lt;/p&gt;

&lt;p&gt;Understand the role of discrete derivatives in edge detection&lt;/p&gt;

&lt;p&gt;Reduce noise interference through image smoothing&lt;/p&gt;

&lt;p&gt;Combine smoothing and differentiation into a single, efficient kernel&lt;/p&gt;

&lt;p&gt;Whether you're a beginner in computer vision or refreshing your signal processing fundamentals, I think you'll find it insightful.&lt;br&gt;
&lt;a href="https://medium.com/p/46832da5c75f" rel="noopener noreferrer"&gt;Read the article here&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Nonlinear filters in image processing.</title>
      <dc:creator>Franciso Zavala </dc:creator>
      <pubDate>Tue, 03 Jun 2025 00:36:21 +0000</pubDate>
      <link>https://dev.to/fjzavala21/nonlinear-filters-in-image-processing-4k2f</link>
      <guid>https://dev.to/fjzavala21/nonlinear-filters-in-image-processing-4k2f</guid>
      <description>&lt;p&gt;One of the most common types of noise in digital images is impulse noise, also known as salt-and-pepper noise. This type of noise randomly alters certain pixels in the image by setting them to the minimum or maximum possible intensity values (e.g., 0 and 255 in 8-bit images), while the rest of the pixels remain unchanged.&lt;/p&gt;

&lt;p&gt;Applying a Gaussian filter in these cases is counterproductive. Convolution with a Gaussian kernel smooths the image through a weighted averaging operation, which affects both noisy and non-noisy pixels. This not only fails to effectively remove the noise, but also introduces widespread blurring in the image&lt;/p&gt;

&lt;p&gt;As an alternative, the median filter offers a much more suitable solution. This filter replaces the value of each pixel with the median of the intensity values of its neighbors within a local window (typically square-shaped). By focusing on the central value of the sorted data, the median filter preserves edges and is highly effective at removing outliers such as those introduced by salt-and-pepper noise.&lt;br&gt;
How It Works.&lt;/p&gt;

&lt;p&gt;The basic procedure for applying the median filter consists of the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For each pixel, define a local window of size w × w centered on that pixel.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.Extract all intensity values within that window.&lt;/p&gt;

&lt;p&gt;3.Sort the values.&lt;/p&gt;

&lt;p&gt;4.Replace the central pixel value with the median of the sorted list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjylqgoeqgj14obs6p6f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjylqgoeqgj14obs6p6f.png" alt="Image description" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/imagecraft/nonlinear-filters-in-image-processing-18bb01720983" rel="noopener noreferrer"&gt;Read the full article here.&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Histogram equalization CLAHE algorithm.</title>
      <dc:creator>Franciso Zavala </dc:creator>
      <pubDate>Tue, 27 May 2025 20:30:18 +0000</pubDate>
      <link>https://dev.to/fjzavala21/histogram-equalization-clahe-algorithm-57hm</link>
      <guid>https://dev.to/fjzavala21/histogram-equalization-clahe-algorithm-57hm</guid>
      <description>&lt;p&gt;The CLAHE (Contrast Limited Adaptive Histogram Equalization) algorithm is an image processing technique designed to enhance local contrast, particularly in images with very dark or bright regions. Unlike global histogram equalization (HE), which applies a single transformation to the entire image, CLAHE divides the image into small regions and performs local equalization. This helps to enhance details in low-contrast areas without excessively amplifying noise in uniform regions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwojvbn1vr6non8mo36b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwojvbn1vr6non8mo36b.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How does CLAHE work?.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Dividing the image into blocks: Tthe image is segmented into uniformly sized blocks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Computing the histogram for each block: A pixel intensity histogram is calculated for each block, representing the distribution of brightness levels within that specific region.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Histogram clipping: If any histogram bin exceeds a predefined maximum threshold, it is clipped to prevent excessive contrast amplification. The clipped excess is then redistributed evenly across all histogram bins, reducing noise in uniform areas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Local histogram equalization: After adjusting the histogram, histogram equalization is applied to each block. This is done using the cumulative distribution function (CDF), which redistributes pixel intensity levels more uniformly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bilinear interpolation between blocks: To prevent abrupt transitions between blocks when reconstructing the image, bilinear interpolation is applied. This smooths out contrast differences between regions, resulting in a more natural and continuous output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Merging the processed blocks: Finally, after equalization and interpolation, the processed blocks are merged to form the final image with enhanced contrast.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://medium.com/p/8841d402fc76" rel="noopener noreferrer"&gt;read the full article&lt;/a&gt;`&lt;/p&gt;

</description>
      <category>computervision</category>
      <category>python</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why software projects fail.</title>
      <dc:creator>Franciso Zavala </dc:creator>
      <pubDate>Mon, 26 May 2025 18:59:00 +0000</pubDate>
      <link>https://dev.to/fjzavala21/why-software-projects-fail-2gla</link>
      <guid>https://dev.to/fjzavala21/why-software-projects-fail-2gla</guid>
      <description>&lt;p&gt;As someone who’s been part of many software development projects —some that succeeded, and others that never saw the light of day— I’ve learned that a good idea and motivation are just the beginning.&lt;/p&gt;

&lt;p&gt;In my latest article, I share a personal reflection on why so many software projects fail, not from theory, but from real-world experience. These are patterns I’ve seen repeat themselves, regardless of the technology stack, team size, or ambition behind the idea.&lt;/p&gt;

&lt;p&gt;Whether you're starting your first project or you're deep in the trenches of another sprint, I hope my insights help you avoid some common pitfalls —or at least make you feel less alone in the chaos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@fjzavala/why-software-projects-fail-621b59dcd43b" rel="noopener noreferrer"&gt;Read the article here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1myibom8ohphyop7frl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1myibom8ohphyop7frl.jpg" alt="Push img" width="131" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>design</category>
    </item>
  </channel>
</rss>
