Welcome to the Computer Vision Research Laboratory at UCSB. The name is there for historical reasons; however, our research agenda and project scope have broadened to include a diverse set of interesting and challenging topics. Today, students, visitors, and faculty are engaged in advanced research related to computer vision, medical image analysis, computer graphics, and bioinformatics. This page is constantly under construction and contains descriptions of some sample projects in the Computer Vision Laboratory. If you desire further information, please contact Professor Yuan-Fang Wang directly.
Modeling the 3D Scenes using a single COTS (commercial-off-the-shelf) digital camera or camcorder
Using a digital camera or camcorder, one can take multiple pictures at random locations in a 3D scene or around some objects of interest. The goal is to model the appearance, structure and behavior (e.g., deformation and motion) of the 3D scenes/objects.
There are, in fact, a multitude of possible formulations of the 3D modeling problem. On one extreme, the input images can be stitched together to build a panorama without explicitly inferring the 3D depth. On the other extreme, 3D depth and texture can be densely recovered at each and every pixel location. Certainly, middle-of-the-road solutions, such as inferring only the camera motion but not the object structure, or inferring discrete, sparse 3D structures, are also possible.
Our research proposes a spectrum of such solutions, from image stitching, to spatially-aware image browsing, to sparse 3D structures ("point cloud" representation), to dense textured-surface 3D models. Our techniques work with any commercial-off-the-shelf digital cameras, without elaborate calibration, special photography equipment, or active sensors. Our modeling algorithms automatically analyze the images to deduce the 3D structure and appearance of the scene/objects. Many 360-degree (complete) and partial 3D models can be constructed this way. Please see our demo pages for more information. If you desire to try your own photos with our programs, please go here. (A new browser page will open to take you to a site off the UCSB domain.)
A Video Analysis Framework for Soft Biometry Security Surveillance
We propose a distributed, multi-camera video analysis paradigm for airport security surveillance. We propose to use a new class of biometry signatures, which are called soft biometry including a person's height, built, skin tone, color of shirts and trousers, motion pattern, trajectory history, etc., to ID and track errant passengers and suspicious events without having to shut down a whole terminal building and cancel multiple flights. One might suspect, and we concur, that it is not very difficult to compute some of these soft biometric signatures from individual, properly-segmented image frames. The real challenge, however, is in designing a robust and intelligent video-analysis system to support the reliable acquisition, maintenance, and correspondence of soft biometry signatures in a coordinated manner from a large number of video streams gathered in a large camera network. The intellectual merit of the proposed research is to address three important video analysis problems in a distributed, multi-camera surveillance network: sensor network calibration, peer-to-peer sensor data fusion, and stationary-dynamic cooperative camera sensing.
q Sensor network calibration. In order to correctly correlate and fuse information from multiple cameras, calibration is of paramount importance. Cameras deployed in a large network have different physical characteristics, such as location, field-of-view (FOV), spatial resolution, color sensitivity, and notion of time. The difference makes answering even simple queries exceedingly difficult. For example, if a subject moves from the FOV of one camera to another, which has different color sensitivity and operates under dissimilar lighting conditions, drastic changes in color signatures do occur. To reliably compute soft biometry to assist the identification of subjects across the FOVs of multiple cameras therefore requires careful color calibration. We have developed and integrated a suite of algorithms for spatial, temporal, and color calibration for cameras with both overlapped and non-overlapped FOVs.
q Peer-to-peer sensor data fusion. As cameras have limited FOVs, multiple cameras are often stationed to monitor an extended surveillance area, such as an indoor arrival/departure lounge or an outdoor parking lot. Collectively, these cameras provide complete spatial coverage of the surveillance area. (A small amount of occlusion by architectural fixtures, decoration, and plantation is often unavoidable.) Individually, the event description inferred from a single camera is likely to be incomplete. (E.g., the trajectory of a vehicle entering a parking lot is only partially observed from a certain vantage point.) We have developed algorithms to fuse video data from multiple cameras for reliable event detection using a hierarchy of Kalman Filters.
q Stationary-dynamic cooperative camera sensing. To achieve effective wide-area surveillance with limited hardware, a surveillance camera is often configured to have a large FOV. However, once suspicious persons/activities have been identified through video analysis, selected cameras ought to obtain close-up views of these suspicious subjects for further scrutiny and identification (e.g., to obtain a close-up view of the license plate of a car or the face of a person). Our solution is to employ stationary-dynamic camera assemblies to enable wide-area coverage and selective focus-of-attention through cooperative sensing. That is, the stationary cameras perform a global, wide FOV analysis of the motion patterns in the surveillance zone. Based on some pre-specified criteria, the stationary cameras identify suspicious behaviors or subjects that need further attention. The dynamic camera, mounted on a mobile platform and equipped with a zoom lens, is then used to obtain close-up view of the subject to reliably compute soft biometry signatures. We have studied research issues to enable cooperative camera sensing, including dynamic camera calibration and stationary-dynamic camera sensing using a visual feedback paradigm.
In this project, we study the problem of automated reconstruction of 2D and 3D scene (structure, appearance, and behavior) from video images. While there are many similar projects being conducted at academia and industry, our project addresses a number of difficult issues in (1) the 3D structures can vary significantly from almost planar to highly complex with large variation in depth, (2) the camera can be at varying distances to the scene, and (3) the scene may show significant deformation over time. Some sample results are shown below. In the first two examples, two images (the top row) were used to generate a 3D model of the visible surface structure with correct texture mapping. Novel views can then be synthesized from the reconstructed 3D model (the bottom rows). These images are taken from inside a knee mockup and from real endoscopy surgery. The fourth example shows the stitching of terrain model from UAV (unmanned aerial vehicle) flight data.
We study a unified framework for achieving robust and real-time image stabilization and rectification. While compensating for a small amount of image jitter due to platform vibration and hand tremble is not a very difficult task, canceling a large amount of image jitter, due to significant, long-range, and purposeful camera motion (such as panning, zooming, and rotation), is much more challenging. While the terms “significant, long-range, and purposeful” may imply that we should not cancel this motion, it should be remembered that in many real-world imaging systems there may be multiple objectives with conflicting solutions. By this we mean that while significant and purposeful camera manipulation is needed to explore new perspectives and acquire novel views, such manipulation often times causes difficulty for the human operator in image interpretation. Hence, an image stabilization algorithm should be designed to allow significant freedom in image acquisition while alleviating difficulty in image interpretation. We mention here two practical problems in diverse application domains that can make use of such an image stabilization and rectification algorithm.
q The first application is in rectifying the video display in video-endoscopy. Endoscopes procedures are minimally invasive surgical procedures where several small incisions are made on the patient to accommodate surgical instruments such as scalpels, scissors, staple guns, and an endoscope. The scope acquires images of the bodily cavity that are displayed in real time on a monitor to provide the visual feedback to the surgeon to perform surgery. In order to view the anatomy in a highly constrictive body cavity (e.g., nasal passage in rhinoscopy and inner ear cavity in otoscopy) and subject to the entry point constraint, the surgeon often manipulates the scope with large panning and rotation motion to eliminate blind spots. The views acquired can be highly non-intuitive, e.g., the anatomy can appear with large perspective distortion, sideways, or even upside down. Hence, while this type of manipulation is necessary to reveal anatomical details, it does cause significant difficulty in image interpretation.
q The second application is in rectifying the video display in an unmanned aerial vehicle (UAV). Under the control of a ground operator, an UAV may purposefully pitch, roll, and rotate to maneuver into certain positions or to evade ground fire. Executing such maneuvers severely alters the capture angle of the on-board camera. Again, the banking action is purposefully aiding in the flight but hindering the intuitive nature of the viewed video.
As should become clear from the preceding discussion, in both applications, the operator manipulates the camera using large panning, zooming, and rotating actions to obtain better views of the subjects (i.e., organs and ground vehicles). The views thus displayed can be highly non-intuitive, may have large perspective or other types of distortion, and may even be upside down. The freedom in such manipulation is absolutely necessary and should not be restricted solely for easing the difficulty in image interpretation. Instead, the goal in designing image rectification algorithms for such applications should be to maintain some consistency and uniformity in the display, while allowing the operator to survey the scene as before.
Our framework selectively compensates for unwanted camera motion to maintain a stable view of the scene. The rectified display has the same information content, but is shown in a much more operator-friendly way. Our contribution is three-fold: (1) proposing a unified image rectification algorithm to cancel large and purposeful image motion to achieve a stable display that is applicable for both far-field and near-field image conditions, (2) improving the robustness and real-time performance of these algorithms with extensive validation on real images, and (3) illustrating the potential of these algorithms by applying them to real-world problems in diverse application domains. The following figures show some sampling results (from real endoscopic surgery and UAV flight data). Video sequences are shown from left to right and from top to bottom. The display is grouped by showing the original, uncertified images on top and the corresponding rectified images immediately on the bottom. As can be seen that even with large panning, zooming and rotation (1st and 3rd rows), our algorithm is able to maintain the orientation in the rectified images (2nd and 4th rows).
We present a behavior simulation algorithm that has the potential of enabling physically-correct, photo-realistic, and real-time behavior simulation for soft tissues and organs. Our approach combines a physically-correct formulation based on boundary element methods with an efficient numeric solver. There are many scenarios, both in off-line training of surgeons and on-line computer-assisted surgery, that the proposed technique can be useful. For example, simulators, used for the purpose of training surgeons in the pre-operative stage, require physically-correct, real-time response of the graphical rendering to inputs from the trainee. However, it has long been recognized that it is difficult to simultaneously satisfy the requirements of physical-correctness and real-time. It is well known that simulation of deformable behaviors is difficult. So far, approaches to this problem can be roughly classified into two categories: those that aim more at efficiency and those that aim more at accuracy. The former is categorized by many mass-spring, spline, and superquadric models while the latter mainly comprises techniques based on the finite element methods (FEM). Our modeling scheme aims to achieve the best of both worlds by providing necessary accuracy at a speed comparable to that of the efficient models.
Our method is based on a physically corrected formulation based on boundary element methods (BEM). Naively speaking, BEM for structure simulation concentrates the analysis power on the boundary of the object (or the surface of a 3D organ). Intuitively, for the same level of discrete resolution, the BEM-based methods have the potential of being significantly less expensive than their FEM-based counterparts. This is because that the FEM methods employ O(n^3) variables (representing the displacement of the body at a particular point under externally applied forces and torques), scattered both in the interior and on the boundary of the object. The BEM methods employ O(n^2) variables (representing surface displacement and traction) only on the boundary of the object, with n representing the resolution along a particular dimension. Hence, BEM achieves significant saving in terms of problem size. (One might argue that there are ways to reduce the problem size for FEM, e.g., multi-resolution and adaptive grid. We are aware of the possibilities. The above analysis serves only as an illustration and does not mean to ignore these possibilities. Furthermore, similar efficient numeric techniques are often applicable to BEM to achieve a corresponding reduction in problem size as well.)
While this simple analysis might look promising, the reality is never this straightforward. No matter it is an FEM- or a BEM-based simulation, the gist of the simulation all comes down to solving a system of linear equations of the form AX=B over time (or a time marching problem), where A involves the material properties such as the Lame constants (and other quantities that have to do with the discretization and interpolation functions in the elements), B involves known boundary conditions (e.g., known displacement and traction at certain surface and interior points), and X are the unknown displacement and traction inside and on the surface of the object. Numeric analysts will quickly point out that while BEM requires less number of variables – which results in a much smaller system of equations (O(n^2) for BEM vs. O(n^3) for FEM) – the real complexity of the BEM solution can be higher. This is because that while FEM results in a bigger matrix A, A is often well conditioned and sparse. Efficient solutions exist for many classes of well conditioned, sparse matrices, which bring the complexity of solution to O(n^3). BEM, on the other hand, always results in a dense matrix A, and the complexity of the solution can be proportional to the cube of the matrix size.
Our proposed numeric algorithm exploits a mechanism to reduce matrix update and solve complexity. Our observation is that the kernel function in the fundamental solution of the BEM is usually smooth, which results in the coefficient matrix having a block-wise low-rank structure, which we call sequentially semi-separable (SSS) for the one-dimensional case, and hierarchically semi-separable (HSS) for higher dimensions. Exploiting this particular matrix structure in our simulation, we are able to achieve real-time behavior simulation on ordinary PC of fairly complex organs. Our simulation allows large changes in boundary conditions, such as those resulted from organ-organ and organ-body wall collision, which is not possible in current state-of-the-art using BEM. This is a significant improvement that increases the applicability of the BEM methods. Snap shots of two deformation sequences are shown below.
Sample video clips (These files are in Windows Media Player wmv format. To save download bandwidth, the video clips are fairly short. They demonstrate an organ being deformed by spatially- and temporally-varying large disturbance with the volume preserved.)
Extremely large deformation. (2.5M)
We are investigating a system for sensing, modeling and control of an upper extremity neural prosthesis. The sensing unit employs a computer vision approach wherein one or more video cameras are used to detect movement of the arm and provide the arm position information to a model. The model uses kinematics and dynamics simulation to control the stimulation and animation of the articulated links. The motion control unit integrates a priori knowledge from the trained model and the observed sensor input, smoothes the limb motion tracking results and delivers a feedback signal to guide or correct the sensing process. In our experiments we compared sensed elbow angle accuracy results between our computer vision based system and developed a visualization system for the arm model.
The number of known protein structures is increasing rapidly, as more researchers are joining the hunt for novel protein structures, more experimental apparatus are deployed, and more theoretical frameworks and software tools are developed for predicting protein structures. Protein structure comparison tools play an important role in this enterprise. In predicting a protein structure from its sequence, researchers usually form a new candidate structure. To avoid potential exponential explosion of structures, that new structure is compared with previously known structures for verification/tuning/correction. Discovering similar folds or similar substructures thus provides restrictions on the conformational space and serves as a starting point for producing useful models.
We present a new method for conducting protein structure similarity searches, which improves on the accuracy, robustness, and efficiency of some existing techniques. Our method is grounded in the theory of differential geometry on 3D space curve matching. We generate shape signatures for proteins that are invariant, localized, robust, compact, and biologically meaningful. To improve matching accuracy, we smooth the noisy raw atomic coordinate data with spline fitting. To improve matching efficiency, we adopt a hierarchical coarse-to-fine strategy. We use an efficient hashing-based technique to screen out unlikely candidates and perform detailed pairwise alignments only for a small number of candidates that survive the screening process. Contrary to other hashing based techniques, our technique employs domain specific information (not just geometric information) in constructing the hash key, and hence, is more tuned to the domain of biology. Furthermore, the invariancy, localization, and compactness of the shape signatures allow us to utilize a well-known local sequence alignment algorithm for aligning two protein structures. One measure of the efficacy of the proposed technique is that we were able to perform structure alignment queries 30 times faster than a well-known method while keeping the quality of the query results at the same level.
The ability to visualize the 3D structure of proteins is critical in many areas such as drug design and protein modeling. This is because the 3D structure of a protein determines its interaction with other molecules, hence its function, and the relation of the protein to other known proteins. We have developed a protein visualization system based on Java 3D. There is growing trend in adopting the Java technology in the fields of bioinformatics and computational biology. The main advantages of Java are its compatibility across different systems/platforms and having the ability to be run remotely through web browsers. Using Java 3D as a graphics engine has also the additional advantage of rapid application development, because Java 3D API incorporates a high-level scene graph model that allows developers to focus on the objects and the scene composition. Java 3D also promises high performance, because it is capable of taking advantage of the graphics hardware in a system. However, using Java 3D for visualization has some performance issues with it. The primary concerns about molecular visualization tools based on Java 3D are in their being slow in terms of interaction speed and in their inability to load large molecules. This behavior is especially apparent when the number of atoms to be displayed is huge, or when several proteins are to be displayed simultaneously for comparison. In this project we present techniques for organizing a Java 3D scene graph to tackle these problems. We demonstrate the effectiveness of these techniques by comparing the visualization component of our system with two other Java 3D based molecular visualization tools. In particular, for van der Waals display mode, with the efficient organization of the scene graph, we could achieve up to eight times improvement in rendering speed and could load molecules three times as large as the previous systems could.
Molecules interact through their surface residues. Calculation of the molecular surface of a protein structure is thus an important step for a detailed functional analysis. One of the main considerations in comparing existing methods for molecular surface computations is their speed. Most of the methods that produce satisfying results for small molecules fail to do so for large complexes. In this project we present a level-set-based approach to compute and visualize a molecular surface at a desired resolution. The emerging level-set methods have been used for computing evolving boundaries in several application areas from fluid mechanics to computer vision. We use a level-set-based approach to compute the molecular surface of a protein of known structure. Our method proceeds in three stages:(1) An outward propagation step that generates the van der Waals surface and the solvent-accessible surface, (2) An inward propagation step that generates the re-entrant surfaces and contact surfaces, i.e., the solvent excluded or the molecular surface, and (3) Another inward propagation step to determine the outer surface and interior cavities of the molecule. The novelty of our algorithm is three-fold: First, we propose a unified framework for solving all the tasks above based on the level-set front-propagation method; second, our algorithm traverses each grid cell at most once and never visits grid cells that are outside the sought-after surfaces to guarantee efficiency; and third, our algorithm correctly detects interior cavities for all kinds of protein topologies. Our method is able to calculate the surface and interior inaccessible cavities very efficiently even for very large molecular complexes. We compared our method to some of the most widely used molecular visualization tools (Swiss-PDBViewer, PyMol, and Chimera) and our results show that we can calculate and display a molecular surface 1.5 to 3.14 times faster on average than all three of the compared programs. Furthermore, we demonstrate that our method is able to detect all of the interior inaccessible cavities that can accommodate one or more water molecules.
Protein classification is important as a protein’s label often times gives a good indication to its biological function. Of many existing classification schemes, SCOP is probably the most trusted one (as it involves significant manual inspection). However, SCOP classification is labor intensive and is not updated frequently. Hence, there is a desire to be able to predict, through some automated means, the SCOP classification of new proteins. A multitude of techniques, based on both sequence and structure similarity, can be used for predicting SCOP classification. However, their applicability and accuracy vary, depending both on the level of taxonomy (family, superfamily, or fold level) and the parameter settings of the techniques. Hence, the classification results from multiple techniques often show varying degrees of conformity with the manually-generated SCOP classifications (the ground truth) and with one another.
This project is aimed at improving the accuracy of automated SCOP classification by combining the decisions of multiple methods in an intelligent manner, using the consensus of a committee (or an ensemble) classifier. Our technique is rooted in machine learning that shows that by judicially employing component classifiers, an ensemble classifier can be constructed to outperform its components. We use two sequence- and three structure-comparison tools as component classifiers. Given a protein structure, using the joint hypothesis we first determine if the protein belongs to an existing group (family, superfamily, or fold) in the SCOP hierarchy. For the proteins that are predicted as members of the existing groups, we then compute their family-, superfamily-, and fold-level classifications using the consensus classifier.
We have shown that by using this method we can significantly improve the classification accuracy compared to those of the individual component classifiers. In particular, we have achieved error rates that are 3 to 12 times less than the individual classifiers' error rates at the family level, 1.5 to 4.5 times less at the superfamily level, and 1.1 to 2.4 times less at the fold level. Our method achieves 98% success for family assignments, 87% success for superfamily assignments, and 61% success for fold assignments. What is significant is that these accuracy numbers are very close to the theoretically maximum performance achievable through ensemble combination.
In this project, we develop a software tool called Information-slips (abbr. as i-slips) that provides a convenient and customizable mechanism for remote collaboration and data sharing in protein science. I-slips are small 3D objects that coexist with and augment the host 3D objects (in our application, protein models). Each i-slip keeps track of three types of information: (1) the host object, which is part (e.g., an amino acid or a secondary structure element) of a 3D protein, (2) the visual configuration, which defines the way to visualize the i-slip, and (3) the content object, which stores user annotation and augmentative information about the host object. Our i-slip design makes two main contributions. Firstly, i-slip goes beyond simple passive annotation to also provide active interactivity. The content object can embed an action to perform a user-defined operation on-demand. Furthermore, the condition to perform the embedded action can be event-driven. That is, i-slips can monitor the environment and automatically handle such predefined events when they occur without the user intervention. Secondly, i-slip is a highly versatile and adaptable information container. The user can easily customize i-slip templates to support new domain-specific content objects, and develop new actions to embed domain-dependent algorithms. Furthermore, the storage and transportation of i-slips are based on the XML technology for a high degree of interoperability. To the best of our knowledge, this is the first protein visualization tool that supports user-contributed information and embeddable actions/activities. The following figures show our system in action. The left one shows that an action note can automatically query PDB database to download and display the PDB file of the protein. The right figure shows a structure comparison action note that can retrieve from PDB and display proteins of a similar structure as the one being studied.
In this project, we propose a scheme for 3D model construction by fusing heterogeneous sensor data. The proposed scheme is intended for use in an environment where multiple, heterogeneous sensors operate asynchronously. Surface depth, orientation, and curvature measurements obtained from multiple sensors and vantage points are incorporated to construct a computer description of the imaged object. The proposed scheme uses Kalman filter as the sensor data integration tool and hierarchical spline surface as the recording data structure. Kalman filter is used to obtain statistically optimal estimates of the imaged surface structure based on possibly noisy sensor measurements. Hierarchical spline surface is used as the representation scheme because it maintains high-order surface derivative continuity, may be adaptively refined, and is storage efficient. We show in this project how these mathematical tools can be used in designing a modeling scheme to fuse heterogeneous sensor data. A sample result is included below, where two types of sensor data (video and structured-light coded) from three vantage points were gathered sequentially. 3D surface structures were then iteratively constructed and refined by incorporating these sensor data.
This project designs and implements a practical and reliable image analysis and tracking algorithm to achieve automated instrument localization and scope maneuvering in robotically-assisted laparoscopic surgery. Laparoscopy is a minimally invasive surgical procedure which utilizes multiple small incisions on the patient's body through which the surgeon inserts tools and a video scope for conducting an operation. The scope relays images of internal organs to a camera and the images are displayed on a video screen. The surgeon performs the operation by viewing the scope images, as opposed to the traditional “open” procedure where a large incision is made on the patient's body for direct viewing.
The current mode of the laparoscopy has an assistant holding the scope and positioning it in response to the surgeon's verbal commands. However, this results in suboptimal visual feedback because the scope is often aimed incorrectly and vibrates due to hand trembling. Computer Motion Inc. has developed a robotic laparoscope positioner (see picture above) to replace the assistant. The surgeon commands the robotic positioner through a hand/foot controller interface or a voice recognition interface.
To further simplify the man-machine interface in controlling the robotic scope positioner, we report here a novel scope positioning scheme using automated image analysis and robotic visual servoing. The scheme enables the surgeon to control his visual feedback and be more efficient in performing surgery without requiring additional use of the hands. For example, our technique is able to automatically center and track instruments without the surgeon’s voice command. This is important as for the safety of the patient, the surgeon must see the operating instrument at all times. Our technique performs automated image analysis to locate and track instruments in the image. When the position of the instrument deviates from the desired location, (e.g., the center of the image) or becomes too large or too small, our system automatically generates the robot control signal to maneuver the robot to obtain better viewing for the surgeon. The tracking system was incorporated into the product offering of Computer Motion Inc. and was used in over thousands of real-world surgery (Computer Motion Inc. has since merged with Intuitive Surgical).
Local Scale Controlled Anisotropic Diffusion with Local Noise Estimate for Image Smoothing and Edge Detection
This project studies a novel local scale controlled piecewise linear diffusion for selective smoothing and edge detection. The diffusion stops at the place and time determined by the minimum reliable local scale and a spatial variant, anisotropic local noise estimate. It shows nisotropic, nonlinear diffusion equation using diffusion coefficients/tensors that continuously depend on the gradient is not necessary to achieve sharp, undistorted, stable edge detection across many scales. The new diffusion is anisotropic and asymmetric only at places it needs to be, i.e., at significant edges. It not only does not diffuse across significant edges, but also enhances edges. It advances geometry-driven diffusion because it is a piecewise linear model rather than a full nonlinear model, thus it is simple to implement and analyze, and avoids the difficulties and problems associated with nonlinear diffusion. It advances local scale control by introducing spatial variant, anisotropic local noise estimation, and local stopping of diffusion. The original local scale control was based on the unrealistic assumption of uniformly distributed noise independent of the image signal. The local noise estimate significantly improves local scale control.
Many software programs have been developed to visualize protein and molecular structures. However, as most visualization software programs do not fully utilize 3D graphics hardware in personal computers, visualization speed and rendering quality can be unsatisfactory. The functionality provided by the script languages of these software programs might also be incomplete to handle huge protein. We have developed a protein visualization platform named ProteinVista. ProteinVista is a well-designed visualization system using the Microsoft Direct3D graphics library and the Microsoft .net framework. It provides a large variety of visualization styles and numerous visualization options. It is also optimized for advanced 3D graphics hardware. The script language used in Protein Vista is based on .net framework and can be written in high-level languages such as C#. It provides powerful functionalities and is easy to understand.