Giter Site home page Giter Site logo

christiangaser / cat12 Goto Github PK

View Code? Open in Web Editor NEW
23.0 1.0 4.0 629.55 MB

Computational Anatomy Toolbox for SPM12

Home Page: https://neuro-jena.github.io/cat

License: GNU General Public License v2.0

C 6.13% MATLAB 85.92% Makefile 0.13% C++ 0.88% Shell 1.35% HTML 4.87% CSS 0.07% Roff 0.19% Mathematica 0.47%
cortical-surfaces cortical-thickness gyrification mri-brain mri-brain-segmentation mri-segmentation neuroimaging statistical-analysis surface-reconstruction visualisation

cat12's Introduction

CAT: Computational Anatomy Toolbox

This toolbox is a an extension to SPM12 (Wellcome Department of Cognitive Neurology) to provide computational anatomy. This covers diverse morphometric methods such as voxel-based morphometry (VBM), surface-based morphometry (SBM), deformation-based morphometry (DBM), and region- or label-based morphometry (RBM).

It is developed by Christian Gaser and Robert Dahnke (Jena University Hospital, Departments of Psychiatry and Neurology) and free but copyright software, distributed under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.

Download

CAT12 toolbox

CAT12 manual Getting Started Quick Start Guide

Older version can be obtained here.

If you intend to install CAT12 from Github:

Requirements

CAT12 is designed to work with SPM12 and Matlab versions 7.4 (R2007a) or newer. No additional toolboxes are required.

Installation

  • Remove the old cat12 folder in spm12/toolbox if existing
  • Unpack the zip-file
  • Copy the cat12 folder to the spm12/toolbox directory
  • If once installed use the update function in CAT12 in order to check for new versions
  • After restarting SPM12 either call CAT12 via the toolbox button or (as short-cut) type cat12 on the Matlab command line.

Download Standalone Version (no need for Matlab licene)

The advantage of the standalone version is that no Matlab license is needed. Only the (free) Matlab Runtime R2017b (v93) has to be downloaded. However, there are some limitations (e.g. no parallelization and no interactive help in the GUI version) and the standalone version is mainly intended to run without GUI on Unix systems. Please check the ENIGMA CAT12 site fore more information and examples to call CAT12 from shell scripts.

The MATLAB Compiler Runtime (MCR) enables you to run applications compiled within MATLAB using MATLAB Compiler. MCR does not require a MATLAB license and can be used to run the MATLAB compiled program on computers which do not have MATLAB installed.

CAT12 Standalone MCR
Linux Linux
Mac Mac
Windows Windows

cat12's People

Contributors

christiangaser avatar robdahn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

cat12's Issues

cannot save image in cat12

I want to solve a problem about saving images from cat12.
"results presentation" -"view results"-"surface overlay"-save
屏幕截图 2024-03-28 005206

the error is shown in this picture
屏幕截图 2024-03-28 005145
which means
**Misusing size
The dimension parameter must be a positive integer scalar within the index range.

cat_surf_results>save_image (line 3027)
sz0 = [0 0 size(hh0.cdata,[2 1])];

An error occurred while calculating the UIControl Callback.**

Surface recon works for LH but fails for RH

Hi all -- having an odd issue with running CAT12 for use in LEAD-DBS. Surface reconstruction works just fine for LH but fails for RH, claiming no WM voxel exists. Running on Mac 13.0.1 via MATLAB R2022b. Tried with numerous datasets so doubt it's a scan quality issue. Has anyone encountered something like this? Any ideas?

CAT12.8.2 r2137

Amap using initial SPM12 segmentations (MRF filter strength 0.07)    50s
    AMAP peaks: [CSF,GM,WM] = [0.36±0.09,0.68±0.06,0.97±0.06]
Final cleanup (gcutstr=0.25)                                      
  Level 1 cleanup (ROI estimation)                                    4s
  Level 1 cleanup (brain masking)                                     4s
  Level 2 cleanup (CSF correction)                                    2s
  Level 3 cleanup (CSF/WM PVE)                                        3s
                                                                     13s
Shooting registration is not required.
Write result maps                                                     1s
Surface and thickness estimation                                  
lh:
  Thickness estimation (0.50 mm³)                                 
    WM distance:                                                     35s
    CSF distance:                                                    15s
    PBT2x thickness:                                                 46s
                                                                    109s
  Create initial surface                                            158s
  Topology correction:                                              696s
  Surface refinement:                                               283s
  Reduction of surface collisions with optimization:                280s
  Spherical mapping with areal smoothing                            141s
  Spherical registration                                            229s
rh:
  Thickness estimation (0.50 mm³)                                 
    WM distance:                                                  WARNING:cat_vol_eidist: Found no object for distance estimation!
WARNING:cat_vol_eidist: Found no object for distance estimation!
    0s
    CSF distance:                                                 WARNING:cat_vol_eidist: Found no object for distance estimation!
WARNING:cat_vol_eidist: Found no object for distance estimation!
    0s
    PBT2x thickness:                                              
------------------------------------------------------------------------
CAT Preprocessing error for anat_t1:
------------------------------------------------------------------------
ERROR: no WM voxel

------------------------------------------------------------------------
  326 - cat_vol_pbt
  506 - cat_surf_createCS2
  795 - cat_main1639
 1269 - cat_run_job1639
   40 - cat_run_newcatch
  341 - run_job

Cleanup 2023

Code cleanup, documentation, and maintenance (2023):
As CAT12 has become more or less mature it is time to document and clean up unused functions, uncommented code blocks and connected or outdated parameters. This issue should help to organise this process.

Documentation:

  • cat_vol_approx. + Add a new simple version and a unit test. ... Although the new recursive function supports quite good values and nicer maps, the test with Collins and HR075 has not shown the desired improvement so far. The figures show the results of high- and low-frequency test cases and HR075, whereas the table shows the values of all unit tests.
cat_vol_approx cat_vol_approx_HR075
method res2 res nn4 nn1 nno4 nno1
mean 2.4690 2.4943 2.5988 2.5458 3.0086 2.5376
std. 3.0776 3.0658 3.1428 3.1616 3.6160 3.0696
time 0.4927 0.4748 0.5583 1.1874 0.1967 1.5742
  • cat_vol_resize. Improve documentation and help. Add unit test.

Cleanup:

  • KAMAP: Remove alternative SPM-preprocessing AMAP pipeline prototype (cat_main_kamap/extopts.segmentation.spm_kamap).
  • APP: Removal of unused APP cases (and connected functions) and reduction of cat.extopts.APP parameter to simple yes/no setting. After revision, the APP full and rough (new) were removed but the APP light option was kept. APP light is an iterative call of the SPM segmentation but only to remove inhomogeneities and works quite well also it is a bit slow. The function parameters were lightly simplified and tested (Collins/HR075).
    CAT12 9_APP
  • cat_vol_pbt3: Remove failed development function and parameters.
  • cat_vol_pbtp2: currently not used but was maybe more stable - need further tests - no, it is worse >> removed.
  • cat_vol_LASs: Simplified version used for PD/T2 processing in cat_main. >> Replace later with an even simpler LAS version?
  • multiTPM: Remove support of multiple TPMs with automatic selection as it is not further used.
  • Fast surface creation: Remove fast surface processing without registration as the CS3 pipeline takes only a bit longer.
  • cat_vol_LAS2: This is a reworked version of cat_vol_LAS with addition comments and smaller updates. I.e. it should replace the old version.

Maintenance:
Further things we could think about are:

  • Dartel: Maybe remove the Dartel support in a future version? - Better not because of test, own templates and compatibility.
  • MRF: Maybe remove AMAP MRF parameter? - CG: No.

Cleanup - Merge main1639 and main pipelines

As the "enhanced" pipeline (cat_run/cat_main) was performing worse in normal data, a previous pipeline (r1639) was reactivated and currently used as default for T1 processing (cat_run1639/cat_main1639). However, both function should be merged, to keep the better results in standard T1 and at once to use the new backup functions, simpler structure and enhanced T2/PD processing.

  • Backup-functions: Integrate backup-funktion of the cat_run pipeline into cat_main*1639er sub-functions and finally remove the 1639er pipeline. Better to do this step by step ...
  • cat_vol_partvol1639 (minor changes, i.e. 1639 could be replaced by a newer version)
  • cat_main_clean_gwc1639 (medium changes, additional harder cleanups (new>1), multiple different calls)
  • cat_main_updateSPM1639 (many changes, +registration update, +inv skull-stripping)
  • cat_main_gintnorm1639 (major changes, -PD/T2 inversion)
  • cat_main1639
  • cat_run_job1639

Longitudinal segmentation batch script error (CAT12 MCR version)

Dear Christian,

Running the longitudinal segmentation script for the standalone/MCR version of CAT12 (error reproducible in the 3 latest releases) results in the following error,

------------------------------------------------------------------------
07-Feb-2023 13:24:27 - Running job #1
------------------------------------------------------------------------
07-Feb-2023 13:24:27 - Running 'CAT12: Segment longitudinal data'
cp: cannot remove '/opt/spm/spm12_mcr/home/gaser/gaser/spm/spm12/toolbox/cat12/cat_long_main.m': Read-only file system
If you do not have write permissions, the administrator should copy the /opt/spm/spm12_mcr/home/gaser/gaser/spm/spm12/toolbox/cat12/cat_long_main.txt file to /opt/spm/spm12_mcr/home/gaser/gaser/spm/spm12/toolbox/cat12/cat_long_main.m after installing the precompiled version. This prevents overwriting the read-only file.
07-Feb-2023 13:24:27 - Done    'CAT12: Segment longitudinal data'
07-Feb-2023 13:24:27 - Done

Apparently CAT attempts to replace a precompiled file (cat_long_main.m) with a raw Matlab script (cat_long_main.txt). Is it then safe to permanently replace one for the other or that would break something else? What would you recommend me to do in that case?

Thanks,
Jordi

Compatibility with Freesurfer issues

Hey folks, loved your program from day 1.

Not sure if there is a workaround in the meantime, but I've been meaning to use the resampled surfaces from your program in other softwares like Freesurfer.

Issue 1 - num_cols and nvertices seem to be flipped.

However, upon trying to load a 164K-resampled .gii file into, say, freeview from Freesurfer, I receive the following error:

freeview -f s12.mesh.thickness.resampled.rsub-001_ses-01_T1w.gii
mrisReadGIFTIdanum: malformed data array [0] in file /home/mpasternak/Documents/tmp/surf/s12.mesh.thickness.resampled.rsub-001_ses-01_T1w.gii: num_vertices=1 num_cols=327684 expected nvertices=327684, num_cols=1
MRISread failed
mrisReadGIFTIdanum: malformed data array [0] in file /home/mpasternak/Documents/tmp/surf/s12.mesh.thickness.resampled.rsub-001_ses-01_T1w.gii: num_vertices=1 num_cols=327684 expected nvertices=327684, num_cols=1

Issue 2 - cat_io_FreeSurfer does not convert resampled .gii files

I chanced upon this while thinking "okay, maybe they have a script that needs to be run in order to fix the above." Some Google-fu lead me to your cat_io_FreeSurfer.m script, but it seems to not work either:

Example issue:

>> cat_io_FreeSurfer('gii2fs', '/home/mpasternak/Documents/tmp/surf/s12.mesh.thickness.resampled.rsub-001_ses-01_T1w.gii')
Error using  '  (line 9)
file_array objects can not be transposed.

Error in cat_io_FreeSurfer>write_surf (line 370)
  vert = reshape(vert',size(vert,1)*size(vert,2),1);

Error in cat_io_FreeSurfer>gii2fs (line 219)
      write_surf(char(surfname{si}), CS.vertices , CS.faces);

Error in cat_io_FreeSurfer (line 68)
        gii2fs(varargin{1})

If it assists in any way, I have uploaded the native-space and resampled thickness files:

cat12_issue20.zip

My apologies if this is just my ignorance to all this coming through and making a non-issue. But if not, could this be addressed?

Collection of ideas, features, extensions, improvements:

  • CSV output of main processing:
    After preprocessing the XML2CSV function could be used to create a final CSV table with major XML results from the processed scans, e.g. tissue volumes, thickness, processing errors, etc. based on the user level (affected file cat_run). The XML2CSV Batch would also work for the ROI labels but would need further validation and optimisation.

Cleanup 2024a

Code cleanup, documentation, and maintenance (2024a):
As CAT12 has become more or less mature it is time to document and clean up unused functions, uncommented code blocks and connected or outdated parameters. This issue should help to organise this process.

  • SegmentBatch: estimate dependencies is quite slow
  • affscale: Improve documentation and help. Add artificial test case?
  • cat_vol_morph: Enhance documentation etc.
  • cat_vol_sanlm2180: Failed update.
  • cat_vol_sanlm2: Unknown status (20220816).
  • cat_vol_report cleanup and comments:
  • cat_vol_report update:
    • remove all uses of k-means thickness (only used for developers, not working as hoped)
    • add BIDS directory path if used (helpful for comparison) in first line as "/[../..path/]"
    • add number of used cores close to "Processing time (n/n-cores)" (multiple cores slow down processing), add also processor & RAM? (expert)
    • add processing data & time (YYYYMMDD-hhmm) in first line "Version" (helpful for comparison)
    • T1w or p0-based surface reconstruction setting behind SRP (expert)
  • check (buggy) corrections of head classes (cat_vol_main[1639][_updateSPM], cat_main_LAS)
  • BIDS handling: There are bugs in handling the paths

Don't hardcode installation path of CAT12 to be inside toolbox directory

The path to CAT12 is hard-coded to be inside the toolbox directory of the SPM12 installation:
https://github.com/ChristianGaser/cat12/blob/main/spm_cat12.m#L43

But SPM12 allows modification of toolbox directory path via spm_get_defaults('tbx') it will iterate over all directories defined in the variable and load toolboxes there:
https://github.com/neurodebian/spm12/blob/master/spm.m#L943-L977

I use this to install SPM toolboxes into lmod modules to provide proper versioning (see #2 for an improvement request there)

fullfile(fileparts(mfilename('fullpath'))) might be a better way to locate the installation path when CAT12 loads.

cat_main_updateSPM1639 indexing error

When I ran this for one particular subject I got the following error:


CAT Preprocessing error for synthSR:
------------------------------------------------------------------------
Index in position 4 exceeds array bounds. Index must not exceed 4.
------------------------------------------------------------------------
   84 - cat_main_updateSPM1639
   85 - cat_main1639
1269 - cat_run_job1639
   40 - cat_run_newcatch
1170 - run_job
  706 - cat_run
------------------------------------------------------------------------

I found the fix:

Change Line 83 of cat_main_updateSPM1639 from


  for ti=1:6

to

  for ti=1:size(P,4)

Cleanup - Organization of SPM batches

The list is too long to allow useful access and regrouping (at least of independent batches would help) with the possible categories (maybe synchronized by GUI elements):

  • Tools:
    • In/Output: XML / CSV tools (XML/CSV readout, XML2CSV. RetroReport. Get*. [ should be saved]
    • Image processing: Resize images, Trimming. Datatype converter. ImageCalculator [ maybe ]
    • Longitudinal processing: Bias Correction. TPM creation. LongReport. Long registration. Average. [ critical for old batches! ]
    • Statistic and visualization tools: XML-boxplot, DisplaySlice
    • Quality tools: Check*. Estimate*
  • Surface Tools: This is ok.
  • Developer Tools: Just test and document.

ibsr gm/wm segmentation very inaccurate

I have used both CAT12 (CAT12.8.2 r2170) and Freesurfer to segment a particular brain scan and I get completely different volumes.

<
                        CAT12 from ibsr   Freesurfer 7.3.2
 Left Cerebral WM(cc):           209        242
 Left Cerebral Cortex (cc)       444        269
 Left Lateral Ventricle (cc):     28         43
 Right Cerebral WM (cc):         208        242
 Right Cerebral Cortex (cc):     440        270 
 Right Lateral Ventricle (cc):    20         28
 ----------------------------------------------
 Total                          1350       1095
>
 Total brain volume (cc):       1618       1309

FSvsCAT12

As we can see from the image, CAT12 overestimates the GM and under estimates the WM and ventricles and yet the volume of the CAT12 pial surface is 1080 cc which is in good agreement with Freesurfer. The CAT12 volumes are calculated from the ibsr output file.

cat 12.8.2 standalone release

Hello!

I was very happy to see that a lot of work went into a standalone version of cat12, that is so much appreciated. Thank you!

In combination with https://github.com/jhuguetn/cat12-docker it's now super easy to run cat12 on our cluster and automatically follow the releases of @jhuguetn to auto-download containers. They are using manual releases based on the content of the download folder http://www.neuro.uni-jena.de/cat12/ however. It seems that there is no versioned release for 12.8.2, just yet. Maybe it's in latest?

May I request a release for CAT12.8.2_r2159_R2017b_MCR_Linux.zip so we get to run the latest code with our container workflow, please? :)

PBT simple

PBT simple surface reconstruction

In the revision of the projection-based thickness (PBT) framework (cat_vol_pbt), major parts of the code were reorganized and simplified. In addition, new ideas were implemented to improve the accuracy in general and the reconstruction of fine structures in particular: (i) the error-prone Eikonal thickness was replaced by a more robust approach, (ii) the simple thickness reconstruction of gyri was extended to reduce intersections of the outer surface, (iii) approximation of thickness for non-cortical voxels instead of complex local smoothing for continuous values, and (iv) to reduce blurring of fine sulci additional functions were introduced.

The supersimple parameter can be used to focus on major steps and switch off additional parts that have minor global but strong local effects.

image
The Figure shows the difference in several example brains, where the new pipeline supports smoother results (without the complex smoothing part of the original PBT function) and preserves fine anatomical details in sulci (e.g. callosal sulcus above the CC, but also small medial sulci of the swallow), but also more pronounced gyral structures.

Details

(1) Multi-level distance estimation

The PBT mapping function cat_vol_pbtp.c (Dahnke et al., 2012) depends strongly on the accuracy of the distance maps. Since the simple voxel-based distance function cat_vbdist.c uses only binary maps, it is quite sensitive to subtle intensity differences, smoothing, myelination, interpolation, small distances below 2 mm, and quantifying asymmetric structures. Although cat_vol_eidist handles most of these problems, it is quite slow and relatively noisy in real data.

Another issue is the correct handling of myelinated GM values, which leads to an underestimation of cortical thickness by misinterpreting myelinated GM values as WM. The estimation is also quite sensitive to small local changes in intensity, i.e., if the values of the myelinated GM cross the threshold of 2.5 in the label map (Yp0 with 1=CSF, 2=GM, and 3=WM), several voxels there change their intensity, resulting in thickness changes of 1-2 mm for quite similar thresholds (e.g., 2.5 ± eps).

While trying to maintain cat_vol_pbt and its subfunctions, the idea arises to measure the distance to a tissue class not only by a single estimate to the average threshold but by averaging several paired measurements to different thresholds. Using pairs allows compensation of the distance biases for lower/higher thresholds. For instance, the simplest case uses 1 pair at 0.25 and 0.75 and the tissue distance underestimation for the 0.25 cases is compensated by the distance overestimation of the 0.75 level. The 0.5 level itself is critical in the case of partial volume classes used by the AMAP.
Using multiple levels improves the accuracy logarithmically with a slight increase of computational needs (but faster than using higher resolutions or later corrections) with good values between 4 and 16 (opt.levels = 8).
However, more levels need to consider interpolation and smoothing effects that can cause overestimation of distances and therefore thickness with increased topology defects, especially in thinner regions. I.e., when we have an object with value 1 and background 0 and PVE in between, we will have paired levels for 0.5±r with 0<r<.5 in general but practical values between 0.2 and 0.4 (opt.range = 0.3).
To further stabilize the mapping, also the PVE values beyond the boundary were used with the same limit. However, values beyond this boundary (e.g. the CSF boundary for the WM distance map) have to be corrected for the additional distance to the second boundary (by a second distance map) to avoid overestimation of thickness.

As we use paired estimation (one with underestimation the other one with overestimation) with the same offset, it could be assumed that no further correction is required. However, a general offset correction by the PVE value itself and/or by half of the average intensity difference supports slight improvements (opt.correctoffset = 2).

In a simplified 1D view, the object boundary can be seen as a hill to which we want to measure the (air) distance (Figure 2A). If the sloop is uniform and there are no plateaus, the mean distance is a good approximation, but otherwise, the average of several measurements is essential. The plateau case is a side effect of the AMAP segmentation with a subclass for CSF-GM and GM-WM, which is one reason why the T1-based surface processing was previously chosen (another is the finer definition of fine CSF grades to detect asymmetries, which is practically less relevant so far).
However, the number of measurements is practically limited by (i) processing time (where cat_vbdist is much faster than cat_vol_eidist), (ii) image/segmentation quality, and (iii) possible interpolation artifacts with overshooting (Figure 2B). The effect of additional measurements is a logarithmic function, so the first iterations are the most effective, where we observed that 2 to 4 pairs represent a good compromise between speed and quality, before other issues (such as interpolation overshoot and other artifacts) become more prominent.

[ Figure 2 - how to measure the average distance to a hill, especially if there is a plateau (A) overshooting issue (B) ]

(2) Gyri reconstruction:

To further stabilize the result, we also use the inverse reconstruction of gyri instead of sulci by processing the inverse label map (4 - Yp0) and using the minimum thickness value (this typically results in lower gyral values). In addition, we correct for the hypothetical shift of the boundary (e.g., for a threshold of 0.25, a distance underestimation of 0.25 voxels is expected (again, this has less impact). Since PBT maps the maximum local value along the anterior to the WM, we used an extended range of voxels that are beyond the opposite tissue boundary (e.g., the CSF-GM boundary for the WM distance), but corrected for the additional distance.
Besides the reconstruction of blurred sulci also the reconstruction of blurred thin gyri can improve the resulting surface.
This can be achieved by (i) a simple independent estimation that finally uses only the minimum thickness or (ii) by a complex dependent estimation that first reconstructs the sulci, followed by the reconstruction of the gyri, and a final estimation step (opt.gyrusrecon = 2). However, the reconstruction of gyri is quite sensitive to blood vessels and requires removing extreme WM distance values that are detected by using a very smooth preliminary thickness map (opt.distcleanup = 1).

(3) Thickness smoothing:

Instead of smoothing the thickness map and a small extension (for stable downsampling), we now approximate the thickness values for the whole image using the cat_vol_approx function, which also includes a small amount of smoothing.

(4) Keeping details and sharpening:

For neocortical surfaces, a mesh resolution of about 1 mm is sufficient and supports fast processing at once. As the down-sampling of surface meshes caused sometimes topology issues and even MATLAB crashes, the default setting reconstructs the surface in the original (internal) resolution (e.g. 1 mm) rather than the interpolated PBT space (0.5 mm). However, the limited precision can result in topology defects those corrections can result in massive errors (removing of hole sulci/gyri). Two filters, keepdetails and sharpening, are used to preserve the blurring of fine structures by emphasizing extreme values in case of smoothing.

(-) Topology correction (inactive):

Since the surface-based topology correction requires re-meshing the surface, which requires further extensive re-meshing and reshaping, we tried to get by with the pure voxel-based topology correction (CS2 vs. CS3 pipeline). Although the surfaces were better in non-defective regions, the results of the voxel-based topology correction were not satisfactory. An additional soft WM topology correction, which corrects only small problems (typically by closing) was implemented in cat_vol_pbtsimple (opt.WMTC) but did not improve the results satisfactorily.

Preliminary results

The Google table include preliminary tests of different parameter settings for 8 selected cases (Collins, HR075, 4397, OASIS031 (WMHs), BUSS02 (Child), BWPT (Phantom), NISALS_UTR (PVEs), ADHD200NYC (LowQuality/Motion)).

cat_main_report error

I use CAT12.9 to preprocess a dataset from Linux command line (matlab -batch). Processing does not generate the .pdf reports when used without GUI. I tried to re-generate these reports using cat_main_report, but run into an error:

>> job.files{1} = 'cat_sub-3556_ses-V06_I372345.xml'

job = 

  struct with fields:

    files: {'cat_sub-3556_ses-V06_I372345.xml'}

>> cat_main_report(job )
Index exceeds the number of array elements (0).

Error in cat_main_report (line 91)
    if isfield( job, 'Pp0' ) && iscell(job.Pp0) && ~isempty( job.Pp0{1} ) && ~isempty( job.Pp0{1} ) && exist( job.Pp0{fi} , 'file' )

Is this the right way to get the report, or am I doing something wrong?

Thank you for your support!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.