Answers.Body: <p>Computer vision is a wide field, and besides the fact that deep learning dominates, there are still many, many other algorithms that see widespread use in both academia and industry.</p>
  <p>For tasks such as image classification / object recognition, the typical paradigm is some CNN architecture such as a ResNet or VGG. There has been lots of works to extend and improves the CNNs, but the basic architecture has not really changed much over the years. Interestingly, there's been some work to encode more complex inductive biases / invariants into the deep learning modelling process, such as Spatial Transformer Networks and Group Equivariant Networks. More classical vision approaches to such problems typically include computing some form of hand-crafted feature (HOG, LBP), and training any off-the-shelf classifier.</p>
  <p>For object detection, the de-facto for many years was Viola-Jones for it's combination of performance and speed (even though there were more accurate systems at the time, but they were slower). More recently, object detection has been dominated by deep learning, with architectures such as SSD, YOLO, all the RCNN variants, etc.</p>
  <p>A related problem to object detection is segmentation. Deep learning again dominates in this area with algorithms such as Mask RCNN. However, many other approaches exist and see some use, such as superpixels (e.g. SLIC), watershed, and normalized cuts.</p>
  <p>For problems such as image search, vision approaches such as Fisher vectors and VLAD (computed from image descriptors such as SIFT or SURF) are still competitive. However, CNN features have also seen use in this domain.</p>
  <p>For video analysis, CNNs (typically, 3D CNNs) are popular. However, they often leverage other vision techniques such as optical flow. The most popular optical flow algorithms are Brox, TVL-1, KLT, and Farneback. There are more recent approaches which attempt to use deep learning to actually learn the optical flow, though.</p>
  <p>An overarching set of techniques that has so many varying applications are interest point detectors, image descriptors, and feature encoding techniques. Interest point detectors attempt to localise interest points in an image or video, and popular detectors include Harris, FAST, and MSER. Image descriptors are used to describe those interest points. Example descriptors include SIFT, SURF, KAZE, and ORB. The descriptors themselves can be used to do various things such as estimate homographies using the RANSAC algorithm (for applications such as panorama and camera stabilisation). However, the descriptors can also be encoded and pooled into a single fixed-length feature vector, which serves as the representation of the image. The most common approach to this encoding is bag of feature / bag of visual words. This is based on K-means. However, popular extensions / variants include Fisher vectors and VLAD.</p>
  <p>Self-supervised and semi-supervised learning is also very popular nowadays in academia, and seeks to get the most of out the abundant unlabelled data. In a computer vision context, popular techniques include MoCo and SimCLR, but new methods are released almost weekly!</p>
  <p>Another problem domain in computer vision is the ability to generate / synthesize images. The is not unique to computer vision, but the common algorithms for this are variational autoencoders (VAEs) and generative adversarial networks (GANs).</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-06-19T08:03:09.947Z
Answers.LastActivityDate: 2020-06-19T08:03:09.947Z
Answers.UserDisplayName: dtorpey
Answers.Body: <p>There are many computer vision (CV) algorithms and models that are used for different purposes. So, of course, I cannot list all of them, but I can enumerate some of them based on my experience and knowledge. Of course, this answer will only give you a flavor of the type of algorithm or model that you will find while solving CV tasks.</p>
  <p>For example, there are algorithms that are used to extract <strong>keypoints</strong> and <strong>descriptors</strong> (which are often collectively called <strong>features</strong>, although the descriptor is the actual feature vector and the keypoint is the actual feature, and in deep learning this distinction between keypoints and descriptors does not even exist, AFAIK) from images, i.e. <strong>feature extraction</strong> algorithms, such as <a href="https://www.cs.ubc.ca/%7Elowe/papers/ijcv04.pdf" rel="nofollow noreferrer"><strong>SIFT</strong></a>, BRISK, FREAK, SURF or ORB. There are also edge and corner detectors. For example, the <a href="http://www.bmva.org/bmvc/1988/avc-88-023.pdf" rel="nofollow noreferrer"><strong>Harris corner detector</strong></a> is a very famous corner detector.</p>
  <p>Nowadays, <strong>convolutional neural networks</strong> (CNNs) have basically supplanted all these algorithms in many cases, especially when enough data is available. Rather than extracting the typical features from an image (such as corners), CNNs extract features that are most useful to solve the task that you want to solve by taking into account the information in the training data (which probably includes corners too!). So, sometimes CNNs are more specifically called <strong>data-driven feature extractors</strong>. There are different types of CNNs. For example, CNNs that were designed for <strong>semantic segmentation</strong> (which is a CV task/problem), such as the <a href="https://arxiv.org/pdf/1505.04597.pdf" rel="nofollow noreferrer"><strong>u-net</strong></a>, or CNNs that were designed for <strong>instance segmentation</strong>, such as <a href="https://arxiv.org/pdf/1703.06870.pdf" rel="nofollow noreferrer"><strong>mask R-CNN</strong></a>.</p>
  <p>There are also algorithms that can be used to normalize features, such as the <a href="https://ai.stackexchange.com/q/21914/2444"><strong>bag-of-features</strong> algorithm</a>, which can be used to create fixed-size feature vectors. This can be particularly useful for tasks like content-based image retrieval.</p>
  <p>There are many other algorithms that could be considered CV algorithms or are used to solve CV tasks. For example, <a href="https://dl.acm.org/doi/10.1145/358669.358692" rel="nofollow noreferrer"><strong>RanSaC</strong></a>, which is a very general algorithm to fit models to data in the presence of outliers, can be used to fit homographies (matrices that are generally used to transform planes to other planes) that transform pixels of one image to another coordinate system of another image. This can be useful for the purpose of <strong>template matching</strong> (which is another CV task), where you want to find a template image in another target image. This is very similar to <strong>object detection</strong>.</p>
  <p>There are also many <strong>image processing</strong> algorithms and techniques that are heavily used in computer vision. For example, all the <strong>filters</strong> (such as Gaussian, median, bilateral, non-local means, etc.) that can be used to smooth, blur or de-noise images. Nowadays, some deep learning techniques have also replaced some of these filters and image processing techniques, such as <strong>de-noising auto-encoders</strong>.</p>
  <p>All these algorithms and models have something in common: they are used to process images and/or get low- or high-level information from images. Most of them are typically used to extract features (i.e. regions of the images that are relevant in some way) from images, so that they can later be used to train a classifier or regressor to perform some kind of task (e.g. find and distinguish the objects, such people, cars, dogs, etc. in an image). The classifiers/regressors are typically machine learning (ML) models, such as SVMs or fully-connected neural networks, but there's a high degree of overlap between CV and ML because some ML tools are used to solve CV tasks (e.g. image classification).</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-11-25T15:21:37.980Z
Answers.Text: Why doesn't this have more upvotes?  This is exactly what I was looking for to refresh my memory after years since my last Computer Vision course
Answers.UserDisplayName: Nathan majicvr.com
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-06-17T22:12:49.520Z
Answers.LastActivityDate: 2024-12-20T14:13:21.527Z
Answers.LastEditDate: 2024-12-20T14:13:21.527Z
Answers.UserDisplayName: nbro
Body: <p>Nowadays, CV has really achieved great performance in many different areas. However, it is not clear what a CV algorithm is.</p>
  <p>What are some examples of CV algorithms that are commonly used nowadays and have achieved state-of-the-art performance?</p>
  
Tags: <computer-vision><reference-request><image-processing><algorithm-request><model-request>
Title: What are the main algorithms used in computer vision?
UserDisplayName: Pluviophile
ThreadText: # What are the main algorithms used in computer vision?
  
  (Asked by: username_0 on 2020-06-17)
  
  Nowadays, CV has really achieved great performance in many different areas. However, it is not clear what a CV algorithm is.
  
  What are some examples of CV algorithms that are commonly used nowadays and have achieved state-of-the-art performance?
  
  **Tags:** computer-vision, reference-request, image-processing, algorithm-request, model-request
  
  ---
  
  ## 2 answers
  
  ### Answer by username_2 on 2020-06-17. Score: 8 | Accepted answer
  
  There are many computer vision (CV) algorithms and models that are used for different purposes. So, of course, I cannot list all of them, but I can enumerate some of them based on my experience and knowledge. Of course, this answer will only give you a flavor of the type of algorithm or model that you will find while solving CV tasks.
  
  For example, there are algorithms that are used to extract **keypoints** and **descriptors** (which are often collectively called **features**, although the descriptor is the actual feature vector and the keypoint is the actual feature, and in deep learning this distinction between keypoints and descriptors does not even exist, AFAIK) from images, i.e. **feature extraction** algorithms, such as [**SIFT**](https://www.cs.ubc.ca/%7Elowe/papers/ijcv04.pdf), BRISK, FREAK, SURF or ORB. There are also edge and corner detectors. For example, the [**Harris corner detector**](http://www.bmva.org/bmvc/1988/avc-88-023.pdf) is a very famous corner detector.
  
  Nowadays, **convolutional neural networks** (CNNs) have basically supplanted all these algorithms in many cases, especially when enough data is available. Rather than extracting the typical features from an image (such as corners), CNNs extract features that are most useful to solve the task that you want to solve by taking into account the information in the training data (which probably includes corners too!). So, sometimes CNNs are more specifically called **data-driven feature extractors**. There are different types of CNNs. For example, CNNs that were designed for **semantic segmentation** (which is a CV task/problem), such as the [**u-net**](https://arxiv.org/pdf/1505.04597.pdf), or CNNs that were designed for **instance segmentation**, such as [**mask R-CNN**](https://arxiv.org/pdf/1703.06870.pdf).
  
  There are also algorithms that can be used to normalize features, such as the [**bag-of-features** algorithm](https://ai.stackexchange.com/q/21914/2444), which can be used to create fixed-size feature vectors. This can be particularly useful for tasks like content-based image retrieval.
  
  There are many other algorithms that could be considered CV algorithms or are used to solve CV tasks. For example, [**RanSaC**](https://dl.acm.org/doi/10.1145/358669.358692), which is a very general algorithm to fit models to data in the presence of outliers, can be used to fit homographies (matrices that are generally used to transform planes to other planes) that transform pixels of one image to another coordinate system of another image. This can be useful for the purpose of **template matching** (which is another CV task), where you want to find a template image in another target image. This is very similar to **object detection**.
  
  There are also many **image processing** algorithms and techniques that are heavily used in computer vision. For example, all the **filters** (such as Gaussian, median, bilateral, non-local means, etc.) that can be used to smooth, blur or de-noise images. Nowadays, some deep learning techniques have also replaced some of these filters and image processing techniques, such as **de-noising auto-encoders**.
  
  All these algorithms and models have something in common: they are used to process images and/or get low- or high-level information from images. Most of them are typically used to extract features (i.e. regions of the images that are relevant in some way) from images, so that they can later be used to train a classifier or regressor to perform some kind of task (e.g. find and distinguish the objects, such people, cars, dogs, etc. in an image). The classifiers/regressors are typically machine learning (ML) models, such as SVMs or fully-connected neural networks, but there's a high degree of overlap between CV and ML because some ML tools are used to solve CV tasks (e.g. image classification).
  
  > **Comments:**
  > **username_3**: Why doesn't this have more upvotes?  This is exactly what I was looking for to refresh my memory after years since my last Computer Vision course  
  
  ---
  
  ### Answer by username_1 on 2020-06-19. Score: 3
  
  Computer vision is a wide field, and besides the fact that deep learning dominates, there are still many, many other algorithms that see widespread use in both academia and industry.
  
  For tasks such as image classification / object recognition, the typical paradigm is some CNN architecture such as a ResNet or VGG. There has been lots of works to extend and improves the CNNs, but the basic architecture has not really changed much over the years. Interestingly, there's been some work to encode more complex inductive biases / invariants into the deep learning modelling process, such as Spatial Transformer Networks and Group Equivariant Networks. More classical vision approaches to such problems typically include computing some form of hand-crafted feature (HOG, LBP), and training any off-the-shelf classifier.
  
  For object detection, the de-facto for many years was Viola-Jones for it's combination of performance and speed (even though there were more accurate systems at the time, but they were slower). More recently, object detection has been dominated by deep learning, with architectures such as SSD, YOLO, all the RCNN variants, etc.
  
  A related problem to object detection is segmentation. Deep learning again dominates in this area with algorithms such as Mask RCNN. However, many other approaches exist and see some use, such as superpixels (e.g. SLIC), watershed, and normalized cuts.
  
  For problems such as image search, vision approaches such as Fisher vectors and VLAD (computed from image descriptors such as SIFT or SURF) are still competitive. However, CNN features have also seen use in this domain.
  
  For video analysis, CNNs (typically, 3D CNNs) are popular. However, they often leverage other vision techniques such as optical flow. The most popular optical flow algorithms are Brox, TVL-1, KLT, and Farneback. There are more recent approaches which attempt to use deep learning to actually learn the optical flow, though.
  
  An overarching set of techniques that has so many varying applications are interest point detectors, image descriptors, and feature encoding techniques. Interest point detectors attempt to localise interest points in an image or video, and popular detectors include Harris, FAST, and MSER. Image descriptors are used to describe those interest points. Example descriptors include SIFT, SURF, KAZE, and ORB. The descriptors themselves can be used to do various things such as estimate homographies using the RANSAC algorithm (for applications such as panorama and camera stabilisation). However, the descriptors can also be encoded and pooled into a single fixed-length feature vector, which serves as the representation of the image. The most common approach to this encoding is bag of feature / bag of visual words. This is based on K-means. However, popular extensions / variants include Fisher vectors and VLAD.
  
  Self-supervised and semi-supervised learning is also very popular nowadays in academia, and seeks to get the most of out the abundant unlabelled data. In a computer vision context, popular techniques include MoCo and SimCLR, but new methods are released almost weekly!
  
  Another problem domain in computer vision is the ability to generate / synthesize images. The is not unique to computer vision, but the common algorithms for this are variational autoencoders (VAEs) and generative adversarial networks (GANs).
  
  
  ---
  
  