[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-cszn--IRCNN":3,"tool-cszn--IRCNN":64},[4,17,26,40,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,2,"2026-04-03T11:11:01",[13,14,15],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":23,"last_commit_at":32,"category_tags":33,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,34,35,36,15,37,38,13,39],"数据工具","视频","插件","其他","语言模型","音频",{"id":41,"name":42,"github_repo":43,"description_zh":44,"stars":45,"difficulty_score":10,"last_commit_at":46,"category_tags":47,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,38,37],{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":10,"last_commit_at":54,"category_tags":55,"status":16},519,"PaddleOCR","PaddlePaddle\u002FPaddleOCR","PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来，转换成计算机可读取的结构化数据，让机器真正“看懂”图文内容。\n\n面对海量纸质或电子文档，PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域，它扮演着连接图像与大型语言模型（LLM）的桥梁角色，能将视觉信息直接转化为文本输入，助力智能问答、文档分析等应用场景落地。\n\nPaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显：不仅支持全球 100 多种语言的识别，还能在 Windows、Linux、macOS 等多个系统上运行，并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目，PaddleOCR 既能满足快速集成的需求，也能支撑前沿的视觉语言研究，是处理文字识别任务的理想选择。",74913,"2026-04-05T10:44:17",[38,14,13,37],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":23,"last_commit_at":62,"category_tags":63,"status":16},2471,"tesseract","tesseract-ocr\u002Ftesseract","Tesseract 是一款历史悠久且备受推崇的开源光学字符识别（OCR）引擎，最初由惠普实验室开发，后由 Google 维护，目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据，有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题，是数字化归档和信息自动化的重要基础工具。\n\n在技术层面，Tesseract 展现了强大的适应能力。从版本 4 开始，它引入了基于长短期记忆网络（LSTM）的神经网络 OCR 引擎，显著提升了行识别的准确率；同时，为了兼顾旧有需求，它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码，开箱即用即可识别超过 100 种语言，并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面，它灵活支持纯文本、hOCR、PDF、TSV 等多种格式，方便后续数据处理。\n\nTesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库（libtesseract），不包含图形用户界面（GUI），因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中",73286,"2026-04-03T01:56:45",[13,14],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":80,"owner_email":81,"owner_twitter":82,"owner_website":83,"owner_url":84,"languages":85,"stars":93,"forks":94,"last_commit_at":95,"license":82,"difficulty_score":96,"env_os":97,"env_gpu":98,"env_ram":99,"env_deps":100,"category_tags":109,"github_topics":110,"view_count":23,"oss_zip_url":82,"oss_zip_packed_at":82,"status":16,"created_at":118,"updated_at":119,"faqs":120,"releases":166},2632,"cszn\u002FIRCNN","IRCNN","Learning Deep CNN Denoiser Prior for Image Restoration (CVPR, 2017) (Matlab)","IRCNN 是一个专注于图像复原的开源深度学习项目，核心目标是利用训练好的卷积神经网络（CNN）去噪器作为“先验知识”，来解决各类图像退化问题。它主要解决了传统方法中“模型优化法”速度慢与“判别学习法”通用性差之间的矛盾：既保留了处理不同任务的灵活性，又具备快速高效的推理能力。\n\n该项目特别适合计算机视觉领域的研究人员、算法开发者以及需要处理高质量图像复原任务的工程师使用。其独特的技术亮点在于引入了变量分裂技术（如半二次分裂 HQS 算法），将复杂的图像复原过程拆解，使得原本仅用于去噪的 CNN 模块能够直接嵌入到数学优化框架中。这意味着用户无需针对去模糊、图像修复、超分辨率重建或彩色图像去马赛克等特定任务重新训练模型，只需调用预训练的去噪器序列，即可高效获得优异的复原效果。作为一个源自 CVPR 2017 的经典方案，IRCNN 为低层视觉任务提供了一套模块化、即插即用的高效解决方案。","# [Learning Deep CNN Denoiser Prior for Image Restoration](http:\u002F\u002Fwww4.comp.polyu.edu.hk\u002F~cslzhang\u002Fpaper\u002FIRCNN_CVPR17.pdf)\n\n![visitors](https:\u002F\u002Fvisitor-badge.glitch.me\u002Fbadge?page_id=cszn\u002FIRCNN) \n\n# PyTorch version\n[https:\u002F\u002Fgithub.com\u002Fcszn\u002FDPIR](https:\u002F\u002Fgithub.com\u002Fcszn\u002FDPIR)\n\n# Abstract\nModel-based optimization methods and discriminative learning methods have been the two dominant strategies for solving various inverse problems in low-level vision.\nTypically, those two kinds of methods have their respective merits and drawbacks, e.g., model-based optimization methods are flexible for handling different inverse problems but are usually time-consuming with sophisticated priors for the purpose of good performance; in the meanwhile, discriminative learning methods have fast testing speed but their application range is greatly restricted by the specialized task.\nRecent works have revealed that, with the aid of variable splitting techniques, denoiser prior can be plugged in as a modular part of model-based optimization methods to solve other inverse problems (e.g., deblurring). Such an integration induces considerable advantage when the denoiser is obtained via discriminative learning. However, the study of integration with fast discriminative denoiser prior is still lacking. To this end, this paper aims to train a set of fast and effective CNN (convolutional neural network) denoisers and integrate them into model-based optimization method to solve other inverse problems. Experimental results demonstrate that the learned set of denoisers can not only achieve promising Gaussian denoising results but also can be used as prior to deliver good performance for various low-level vision applications.\n\n# Basic Idea\nWith the aid of variable splitting techniques, such as alternating direction method of multipliers (ADMM) method and half quadratic splitting (HQS) method, it is possible to deal\nwith fidelity term and regularization term of general image restoration formulation separately, and particularly, the regularization term only corresponds to a denoising subproblem. \nConsequently, this enables an integration of any discriminative denoisers into model-based optimization methods to solve various image restoration tasks, such as \n- **Image Deblurring**\n- **Image Inpainting**\n- **Single Image Super-Resolution** \n- **Color Image Demosaicking**\n\nThere is no additional training for these tasks.\n\n# Half-Quadratic Splitting (HQS) Algorithm\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_c5204a97888a.png\" width=\"600px\"\u002F>\n\n\n\n# Image Deblurring\n The left is the blurred image. The right is the deblurred image by IRCNN with estimated kernels by other blind deblurring methods.\n- Deblur_set1\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_a1de33b4e0f5.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_6bf7cfb0a633.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_0ff7eda561d1.png\" width=\"60px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_37e4473e4fb4.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_86b7d1a3c166.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_354ef8daa8f4.png\" width=\"60px\"\u002F>\n\n- Deblur_set2\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_8a75898d9151.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_bc2417d5715c.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_026d26675982.png\" width=\"60px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_b3aabc9d0d3b.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_da26ab46ec46.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_336396d25397.png\" width=\"60px\"\u002F>\n\n- Deblur_set3\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_d5053c320a99.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_fbfdcb7f3609.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_85659e4dbbc6.png\" width=\"60px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_b7c271e705d3.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_5f2613fd7fa6.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_90017981a1f5.png\" width=\"60px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_1798016b6c9e.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_7c348800304d.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_36106935c92c.png\" width=\"60px\"\u002F>\n\n\n\nUse [Demo_deblur_real_application.m](Demo_deblur_real_application.m) to test IRCNN for image deblurring with estimated kernel by other blind deblurring methods.\n\n# Image Inpainting\n\nThe left is the masked image. The right is the recovered image by IRCNN.\n\n- Inpaint_set1\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_c47b89bc240b.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_23d2bc56e1a6.png\" width=\"350px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_cd798c791465.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_7b2d058d2882.png\" width=\"350px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_70ff85d68f29.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_c03a6d1ff99a.png\" width=\"350px\"\u002F>\n\n- Inpaint_set2\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_0ec9a5ab4034.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_fdde827a83ec.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_7f2de692065b.png\" width=\"60px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_ceedb38e3c5b.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_954d57da617a.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_d6cfb7bde375.png\" width=\"60px\"\u002F>\n\nUse [Demo_inpaint.m](.\u002FDemo_inpaint.m) and [Demo_inpaint_real_application.m](Demo_inpaint_real_application.m) to produce the above results.\n\n# Single Image Super-Resolution (SISR)\n\n#### IRCNN considers three degradation models for SISR.\n\n#### 1. Bicubic degradation\n\n```matlab\ny = imresize(x, 1\u002Fsf, 'bicubic') % y: LR image; x: clean HR image; sf: scale factor\n```\n\nIRCNN for bicubic degradation has a comparable performance to VDSR and DnCNN.\n\nUse [Demo_SISR_YCbCr.m](.\u002FDemo_SISR_YCbCr.m) and [Demo_SISR_RGB.m](.\u002FDemo_SISR_RGB.m) to produce the SISR results.\n\n#### 2. Blurring by Gaussian kernel followed by downsampling\n\nFor scale factor 3,\n\n```matlab\nkernelsize = ceil(sigma*3)*2+1; % or 7 for sigma = 1.6\nkernel     = fspecial('gaussian',kernelsize,sigma);\nblur_HR    = imfilter(im,kernel,'replicate')\nLR         = imresize(blur_HR, 1\u002Fscale, 'nearest');\n```\n\nFor scale factors 2 and 4,\n\n```matlab\nkernelsize = ceil(sigma*3)*2+2;\nkernel     = fspecial('gaussian',kernelsize,sigma);\nblur_HR    = imfilter(im, kernel,'replicate');\nLR         = blur_HR(scale\u002F2:scale:end-scale\u002F2,scale\u002F2:scale:end-scale\u002F2,:);\n```\n\nUse [Demo_SISR_YCbCr.m](.\u002FDemo_SISR_YCbCr.m) and [Demo_SISR_RGB.m](.\u002FDemo_SISR_RGB.m) to produce the SISR results.\n\n#### 3. Blurring by ***arbitrary*** kernel followed by standard K-fold downsampler (matlab function '***downsample***')\n\n```matlab\nblur_HR    = imfilter(im, kernel,'replicate'); % kernel can be arbitrary, such as motion blur, Gaussian blur.\nfor i = 1:size(x,3)\n LR(:,:,i) = downsample(downsample(blur_HR(:,:,i),sf)',sf)';\nend\n```\n\nMore details on this degradation model can be found in the following paper.\n\n[1] Chan, Stanley H., Xiran Wang, and Omar A. Elgendy. \"Plug-and-Play ADMM for image restoration: Fixed-point convergence and   applications.\" IEEE Transactions on Computational Imaging 3.1 (2017): 84-98.\n\n\n\nThe left is the zoomed LR image (x3) with motion blur kernel, the right is the super-resolved image (x3) by IRCNN.\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_a14c422ad6f9.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_6c05f0c48843.png\" width=\"350px\"\u002F>\n\nThe left is the low-resolution (LR) image. The right is the super-resolved image by IRCNN.\n\n- SISR_set1, synthetic LR image SR\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_df5d5160ed1c.png\" width=\"160px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_0df1498c6a07.png\" width=\"320px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_641c07aa9c22.png\" width=\"240px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_5beadfcb79e7.png\" width=\"480px\"\u002F>\n\n- SISR_set2, real LR image SR\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_66f398fe758f.png\" width=\"109px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_08b27cd2dfd4.png\" width=\"218px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_a3123432c7a3.png\" width=\"436px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_b4274a127bc2.png\" width=\"220px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_7f6083541135.png\" width=\"440px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_6cf4c4eba29f.png\" width=\"266px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_19b1fbab98a6.png\" width=\"532px\"\u002F>\n\nUse [Demo_SISR_direct_downsampler_real_application.m](.\u002FDemo_SISR_direct_downsampler_real_application.m) to produce the above SISR results.\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_4f4f818aef87.png\" width=\"820px\"\u002F>\n\n# Color Image Demosaicking\n\nThe left is the mosaiced image. The right is the demosaiced image by IRCNN.\n\n- Set18 (McMaster, IMAX)\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_490cd369d4f2.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_510592fccc48.png\" width=\"350px\"\u002F>\n\n- Set24 (Kodak)\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_17e968ae256f.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_f90b816135b7.png\" width=\"350px\"\u002F>\n\nUse [Demo_demosaiking.m](.\u002FDemo_demosaiking.m) to produce the above results.\n\n# Requirements and Dependencies\n- MATLAB R2015b\n- [Cuda](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-toolkit-archive)-8.0 & [cuDNN](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn) v-5.1\n- [MatConvNet](http:\u002F\u002Fwww.vlfeat.org\u002Fmatconvnet\u002F)\n\n# Example: Installation of CUDNN5.1, CUDA 8.0 GA2 and Matconvnet (Windows 7 64bit) (by [kusiwu](https:\u002F\u002Fgithub.com\u002Fkusiwu))\nDownload Visual studio 2015 and install it.\n\nDownload and install cuda 8.0 GA2: \nThere is two installer, one is base installer and the other one is patch. You should download all of them. \nhttps:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-80-ga2-download-archive\nFirst install base installer (1.3GB) and then install patch (43.1MB)\nMy cuda install path is: 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0'.\nYou may need to add path CUDA_PATH if the setup does not do that. (as environment variable)\n\nDownload cudnn5.1. You should register to nvidia and download cudnn 5.1.  Search in google please.\nThen you should extract the zip into \"C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0\"\n(See http:\u002F\u002Fdocs.nvidia.com\u002Fdeeplearning\u002Fsdk\u002Fcudnn-install\u002Findex.html)\n**Installations may need reboot.**\n\n%Download matconvnet http:\u002F\u002Fwww.vlfeat.org\u002Fmatconvnet\u002Fdownload\u002Fmatconvnet-1.0-beta25.tar.gz\n%create a directory named as \"matconvnet\" inside your matlab directory. \n%My matlab directory is = \"D:\\Program files\\MATLAB\\R2016b\\\" , yours may differ, please change yours.\n%then extract matconvnet zip file and copy the file into \"D:\\Program files\\MATLAB\\R2016b\\matconvnet\\matconvnet-1.0-beta25\"\n\n%open matlab, all the below codes should be written into matlab command window. \n%write : in your case, the path can be different !!! Select visual studio 2015 path both C and C++ compiler.\n```\nmex -setup\nmex -setup:'D:\\Program files\\MATLAB\\R2016b\\bin\\win64\\mexopts\\msvc2015.xml' C\n\nmex -setup C++\nmex -setup:'D:\\Program files\\MATLAB\\R2016b\\bin\\win64\\mexopts\\msvcpp2015.xml' C++\n\ncd 'D:\\Program files\\MATLAB\\R2016b\\matconvnet\\matconvnet-1.0-beta25'\naddpath matlab\n\n%run this\nvl_compilenn('enableGpu', true, 'cudaMethod', 'nvcc', ...\n               'cudaRoot', 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0', ...\n               'enableCudnn', true, 'cudnnRoot', 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0') ;\n```\n%you will see lots of these messages and also many warnings may occur.\n\n> %Building with 'Microsoft Visual C++ 2015 Professional'.\n> %MEX completed successfully.\n> %Building with 'Microsoft Visual C++ 2015 Professional (C)'.\n> %MEX completed successfully.\n\n\n%write this \n[`gpuDevice`](https:\u002F\u002Fwww.mathworks.com\u002Fhelp\u002Fdistcomp\u002Fexamples\u002Fselecting-a-gpu-device-and-examining-its-properties.html?requestedDomain=true)\nand you should see something like that, but name may differ related with your graphic card.\n\n> CUDADevice with properties:\n> \n>                       Name: 'Tesla K20c'\n>                      Index: 1\n>          ComputeCapability: '3.0'\n>             SupportsDouble: 1\n>              DriverVersion: 6\n>             ToolkitVersion: 5.5000\n>         MaxThreadsPerBlock: 1024\n>           MaxShmemPerBlock: 49152\n>         MaxThreadBlockSize: [1024 1024 64]\n>                MaxGridSize: [2.1475e+09 65535 65535]\n>                  SIMDWidth: 32\n>                TotalMemory: 5.0330e+09\n>            AvailableMemory: 4.9185e+09\n>        MultiprocessorCount: 13\n>               ClockRateKHz: 705500\n>                ComputeMode: 'Default'\n>       GPUOverlapsTransfers: 1\n>     KernelExecutionTimeout: 0\n>           CanMapHostMemory: 1\n>            DeviceSupported: 1\n>             DeviceSelected: 1\n\n\n\n%Lets test the system.\n`vl_testnn`\n\n%You will see messages like that this test may take 10 -20minute.\n\n> Done nnbilinearsampler[dataType=single,device=cpu]\u002Fbwd_data_consistency(ih=value2,iw=value1,oh=value1,ow=value2,multiple_grids=value1) in 0.00029763 seconds\n> Running nnbilinearsampler[dataType=single,device=cpu]\u002Fbwd_data_consistency(ih=value2,iw=value1,oh=value1,ow=value2,multiple_grids=value2)\n> Done nnbilinearsampler[dataType=single,device=cpu]\u002Fbwd_data_consistency(ih=value2,iw=value1,oh=value1,ow=value2,multiple_grids=value2) in 0.00046763 seconds\n> %At the end you should see a message like that:\n> %Totals:\n> %   3586 Passed, 0 Failed, 0 Incomplete.\n> %   1439.9093 seconds testing time.\n> \n   \n## Testing IRCNN Demos\nUnzip IRCNN into a folder named for example:\nD:\\IRCNN\n\nThe last step, open matlab command window and write these,\n\n```\ncd 'D:\\IRCNN'\nDemo_demosaiking.m\n```\n\n\n\n\n\n# Citation\n\n```BibTex\n @inproceedings{zhang2017learning,\n   title={Learning Deep CNN Denoiser Prior for Image Restoration},\n   author={Zhang, Kai and Zuo, Wangmeng and Gu, Shuhang and Zhang, Lei},\n   booktitle={IEEE Conference on Computer Vision and Pattern Recognition},\n   pages={3929--3938},\n   year={2017},\n }\n ```\n","# [用于图像恢复的深度CNN去噪先验学习](http:\u002F\u002Fwww4.comp.polyu.edu.hk\u002F~cslzhang\u002Fpaper\u002FIRCNN_CVPR17.pdf)\n\n![visitors](https:\u002F\u002Fvisitor-badge.glitch.me\u002Fbadge?page_id=cszn\u002FIRCNN) \n\n# PyTorch版本\n[https:\u002F\u002Fgithub.com\u002Fcszn\u002FDPIR](https:\u002F\u002Fgithub.com\u002Fcszn\u002FDPIR)\n\n# 摘要\n基于模型的优化方法和判别式学习方法一直是解决低层视觉中各类逆问题的两大主流策略。\n通常，这两种方法各有优劣：基于模型的优化方法在处理不同逆问题时较为灵活，但为了获得良好的性能，往往需要设计复杂的先验模型，且计算耗时较长；而判别式学习方法虽然测试速度快，但其应用范围却受限于特定任务。\n近期的研究表明，借助变量分裂技术，可以将去噪先验作为模块化组件嵌入到基于模型的优化方法中，以解决其他逆问题（如去模糊）。当去噪器通过判别式学习获得时，这种集成方式具有显著优势。然而，关于与快速判别式去噪先验相结合的研究仍显不足。为此，本文旨在训练一组快速有效的CNN（卷积神经网络）去噪器，并将其集成到基于模型的优化方法中，以解决其他逆问题。实验结果表明，所学习的一组去噪器不仅能够取得令人满意的高斯去噪效果，还可以作为先验知识，为多种低层视觉应用提供良好的性能。\n\n# 基本思想\n借助交替方向乘子法（ADMM）和半二次分裂（HQS）等变量分裂技术，可以分别处理通用图像恢复公式中的保真项和正则化项，其中正则化项仅对应于一个去噪子问题。\n因此，这使得任何判别式去噪器都可以被集成到基于模型的优化方法中，以解决各种图像恢复任务，例如：\n- **图像去模糊**\n- **图像修复**\n- **单幅图像超分辨率**\n- **彩色图像去马赛克**\n\n这些任务无需额外训练。\n\n# 半二次分裂（HQS）算法\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_c5204a97888a.png\" width=\"600px\"\u002F>\n\n\n# 图像去模糊\n左侧为模糊图像，右侧为使用IRCNN结合其他盲去模糊方法估计的核进行去模糊后的图像。\n- Deblur_set1\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_a1de33b4e0f5.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_6bf7cfb0a633.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_0ff7eda561d1.png\" width=\"60px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_37e4473e4fb4.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_86b7d1a3c166.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_354ef8daa8f4.png\" width=\"60px\"\u002F>\n\n- Deblur_set2\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_8a75898d9151.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_bc2417d5715c.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_026d26675982.png\" width=\"60px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_b3aabc9d0d3b.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_da26ab46ec46.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_336396d25397.png\" width=\"60px\"\u002F>\n\n- Deblur_set3\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_d5053c320a99.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_fbfdcb7f3609.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_85659e4dbbc6.png\" width=\"60px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_b7c271e705d3.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_5f2613fd7fa6.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_90017981a1f5.png\" width=\"60px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_1798016b6c9e.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_7c348800304d.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_36106935c92c.png\" width=\"60px\"\u002F>\n\n\n\n使用[Demo_deblur_real_application.m](Demo_deblur_real_application.m)来测试IRCNN在其他盲去模糊方法估计的核下的图像去模糊效果。\n\n# 图像修复\n\n左侧为带掩码的图像，右侧为使用IRCNN修复后的图像。\n- Inpaint_set1\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_c47b89bc240b.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_23d2bc56e1a6.png\" width=\"350px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_cd798c791465.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_7b2d058d2882.png\" width=\"350px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_70ff85d68f29.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_c03a6d1ff99a.png\" width=\"350px\"\u002F>\n\n- Inpaint_set2\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_0ec9a5ab4034.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_fdde827a83ec.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_7f2de692065b.png\" width=\"60px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_ceedb38e3c5b.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_954d57da617a.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_d6cfb7bde375.png\" width=\"60px\"\u002F>\n\n上述结果可通过[Demo_inpaint.m](.\u002FDemo_inpaint.m)和[Demo_inpaint_real_application.m](Demo_inpaint_real_application.m)生成。\n\n# 单幅图像超分辨率（SISR）\n\n#### IRCNN 考虑了三种用于 SISR 的退化模型。\n\n#### 1. 双三次插值退化\n\n```matlab\ny = imresize(x, 1\u002Fsf, 'bicubic') % y: 低分辨率图像; x: 清晰的高分辨率图像; sf: 缩放因子\n```\n\n针对双三次插值退化的 IRCNN，在性能上与 VDSR 和 DnCNN 相当。\n\n使用 [Demo_SISR_YCbCr.m](.\u002FDemo_SISR_YCbCr.m) 和 [Demo_SISR_RGB.m](.\u002FDemo_SISR_RGB.m) 来生成 SISR 结果。\n\n#### 2. 高斯核模糊后下采样\n\n对于缩放因子为 3 的情况：\n\n```matlab\nkernelsize = ceil(sigma*3)*2+1; % 或者当 sigma = 1.6 时取 7\nkernel     = fspecial('gaussian',kernelsize,sigma);\nblur_HR    = imfilter(im,kernel,'replicate')\nLR         = imresize(blur_HR, 1\u002Fscale, 'nearest');\n```\n\n对于缩放因子为 2 和 4 的情况：\n\n```matlab\nkernelsize = ceil(sigma*3)*2+2;\nkernel     = fspecial('gaussian',kernelsize,sigma);\nblur_HR    = imfilter(im, kernel,'replicate');\nLR         = blur_HR(scale\u002F2:scale:end-scale\u002F2,scale\u002F2:scale:end-scale\u002F2,:);\n```\n\n使用 [Demo_SISR_YCbCr.m](.\u002FDemo_SISR_YCbCr.m) 和 [Demo_SISR_RGB.m](.\u002FDemo_SISR_RGB.m) 来生成 SISR 结果。\n\n#### 3. 使用***任意***核进行模糊处理，随后通过标准的 K 倍下采样器（MATLAB 函数 ‘***downsample***’）进行下采样\n\n```matlab\nblur_HR    = imfilter(im, kernel,'replicate'); % 核可以是任意的，例如运动模糊、高斯模糊。\nfor i = 1:size(x,3)\n LR(:,:,i) = downsample(downsample(blur_HR(:,:,i),sf)',sf)';\nend\n```\n\n关于该退化模型的更多细节，请参阅以下论文。\n\n[1] Chan, Stanley H., Xiran Wang, and Omar A. Elgendy. “用于图像恢复的即插即用 ADMM：固定点收敛及应用。” IEEE 计算成像汇刊 3.1 (2017): 84-98.\n\n\n\n左侧是经过运动模糊核处理后的放大 3 倍的低分辨率图像，右侧是通过 IRCNN 超分辨率重建后的 3 倍图像。\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_a14c422ad6f9.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_6c05f0c48843.png\" width=\"350px\"\u002F>\n\n左侧是低分辨率（LR）图像。右侧是通过 IRCNN 超分辨率重建后的图像。\n\n- SISR_set1，合成低分辨率图像的超分辨率\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_df5d5160ed1c.png\" width=\"160px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_0df1498c6a07.png\" width=\"320px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_641c07aa9c22.png\" width=\"240px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_5beadfcb79e7.png\" width=\"480px\"\u002F>\n\n- SISR_set2，真实低分辨率图像的超分辨率\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_66f398fe758f.png\" width=\"109px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_08b27cd2dfd4.png\" width=\"218px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_a3123432c7a3.png\" width=\"436px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_b4274a127bc2.png\" width=\"220px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_7f6083541135.png\" width=\"440px\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_6cf4c4eba29f.png\" width=\"266px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_19b1fbab98a6.png\" width=\"532px\"\u002F>\n\n使用 [Demo_SISR_direct_downsampler_real_application.m](.\u002FDemo_SISR_direct_downsampler_real_application.m) 来生成上述 SISR 结果。\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_4f4f818aef87.png\" width=\"820px\"\u002F>\n\n# 彩色图像去马赛克\n\n左侧是马赛克图像。右侧是通过 IRCNN 去马赛克后的图像。\n\n- Set18（麦克马斯特大学，IMAX）\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_490cd369d4f2.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_510592fccc48.png\" width=\"350px\"\u002F>\n\n- Set24（柯达）\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_17e968ae256f.png\" width=\"350px\"\u002F> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_readme_f90b816135b7.png\" width=\"350px\"\u002F>\n\n使用 [Demo_demosaiking.m](.\u002FDemo_demosaiking.m) 来生成上述结果。\n\n# 要求与依赖项\n- MATLAB R2015b\n- [Cuda](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-toolkit-archive)-8.0 & [cuDNN](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn) v-5.1\n- [MatConvNet](http:\u002F\u002Fwww.vlfeat.org\u002Fmatconvnet\u002F)\n\n# 示例：在 Windows 7 64位系统上安装 cuDNN 5.1、CUDA 8.0 GA2 和 MatConvNet（由 [kusiwu](https:\u002F\u002Fgithub.com\u002Fkusiwu) 提供）\n下载并安装 Visual Studio 2015。\n\n下载并安装 CUDA 8.0 GA2：\n有两个安装程序，一个是基础安装包，另一个是补丁。您需要同时下载这两个文件。\nhttps:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-80-ga2-download-archive\n先安装基础安装包（1.3GB），再安装补丁（43.1MB）。\n我的 CUDA 安装路径为：'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0'。\n如果安装程序没有自动设置，请手动添加 CUDA_PATH 环境变量。\n\n下载 cuDNN 5.1。您需要注册 NVIDIA 账号后才能下载 cuDNN 5.1。请使用 Google 搜索获取下载链接。\n然后将压缩包解压到 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0' 目录下。\n（参考文档：http:\u002F\u002Fdocs.nvidia.com\u002Fdeeplearning\u002Fsdk\u002Fcudnn-install\u002Findex.html）\n**安装过程中可能需要重启计算机。**\n\n% 下载 MatConvNet：http:\u002F\u002Fwww.vlfeat.org\u002Fmatconvnet\u002Fdownload\u002Fmatconvnet-1.0-beta25.tar.gz\n% 在您的 MATLAB 安装目录下创建一个名为 \"matconvnet\" 的文件夹。\n% 我的 MATLAB 安装目录为：'D:\\Program files\\MATLAB\\R2016b\\\"，您的路径可能不同，请根据实际情况修改。\n% 将 MatConvNet 压缩包解压，并将文件复制到 'D:\\Program files\\MATLAB\\R2016b\\matconvnet\\matconvnet-1.0-beta25' 目录下。\n\n% 打开 MATLAB，在命令窗口中输入以下代码：\n% 请注意，您的路径可能会有所不同！！！选择 Visual Studio 2015 的 C 和 C++ 编译器路径。\n```\nmex -setup\nmex -setup:'D:\\Program files\\MATLAB\\R2016b\\bin\\win64\\mexopts\\msvc2015.xml' C\n\nmex -setup C++\nmex -setup:'D:\\Program files\\MATLAB\\R2016b\\bin\\win64\\mexopts\\msvcpp2015.xml' C++\n\ncd 'D:\\Program files\\MATLAB\\R2016b\\matconvnet\\matconvnet-1.0-beta25'\naddpath matlab\n\n% 运行以下命令\nvl_compilenn('enableGpu', true, 'cudaMethod', 'nvcc', ...\n               'cudaRoot', 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0', ...\n               'enableCudnn', true, 'cudnnRoot', 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0') ;\n```\n% 您会看到许多类似的消息，也可能出现一些警告。\n> % 使用 'Microsoft Visual C++ 2015 Professional' 进行编译。\n> % MEX 编译成功。\n> % 使用 'Microsoft Visual C++ 2015 Professional (C)' 进行编译。\n> % MEX 编译成功。\n\n% 输入以下命令\n[`gpuDevice`](https:\u002F\u002Fwww.mathworks.com\u002Fhelp\u002Fdistcomp\u002Fexamples\u002Fselecting-a-gpu-device-and-examining-its-properties.html?requestedDomain=true)\n您应该会看到类似的信息，不过设备名称可能会因您的显卡而异。\n> CUDADevice 属性：\n> \n>                       名称: 'Tesla K20c'\n>                      索引: 1\n>          计算能力: '3.0'\n>             支持双精度: 1\n>              驱动版本: 6\n>             工具包版本: 5.5000\n>         每个线程块最大线程数: 1024\n>           每个线程块最大共享内存: 49152\n>         最大线程块尺寸: [1024 1024 64]\n>                最大网格尺寸: [2.1475e+09 65535 65535]\n>                  SIMD 宽度: 32\n>                总内存: 5.0330e+09\n>            可用内存: 4.9185e+09\n>        多处理器数量: 13\n>               时钟频率: 705500\n>                计算模式: '默认'\n>       GPU 数据传输与计算重叠: 1\n>     内核执行超时: 0\n>           是否可映射主机内存: 1\n>            设备支持: 1\n>             设备已选中: 1\n\n\n\n% 让我们测试一下系统。\n`vl_testnn`\n\n% 您会看到类似以下的消息，此测试可能需要 10 到 20 分钟。\n> 完成 nnbilinearsampler[数据类型=single，设备=cpu]\u002F反向传播数据一致性(ih=value2,iw=value1,oh=value1,ow=value2,multiple_grids=value1) 用时 0.00029763 秒\n> 正在运行 nnbilinearsampler[数据类型=single，设备=cpu]\u002F反向传播数据一致性(ih=value2,iw=value1,oh=value1,ow=value2,multiple_grids=value2)\n> 完成 nnbilinearsampler[数据类型=single，设备=cpu]\u002F反向传播数据一致性(ih=value2,iw=value1,oh=value1,ow=value2,multiple_grids=value2) 用时 0.00046763 秒\n> % 最后您应该会看到如下信息：\n> % 总计：\n> %   3586 项通过，0 项失败，0 项未完成。\n> %   测试耗时 1439.9093 秒。\n> \n   \n## 测试 IRCNN 示例\n将 IRCNN 解压到一个名为例如：\nD:\\IRCNN 的文件夹中。\n\n最后一步，在 MATLAB 命令窗口中输入以下内容：\n\n```\ncd 'D:\\IRCNN'\nDemo_demosaiking.m\n```\n\n\n\n\n\n# 引用\n\n```BibTex\n @inproceedings{zhang2017learning,\n   title={学习深度 CNN 去噪先验用于图像恢复},\n   author={Zhang, Kai and Zuo, Wangmeng and Gu, Shuhang and Zhang, Lei},\n   booktitle={IEEE 计算机视觉与模式识别会议},\n   pages={3929--3938},\n   year={2017},\n }\n ```","# IRCNN 快速上手指南\n\nIRCNN (Iterative Regularization Convolutional Neural Network) 是一个基于深度 CNN 去噪先验的图像复原工具。它利用变量分裂技术（如 HQS 算法），将训练好的去噪器作为模块化组件，无需额外训练即可解决图像去模糊、图像修复、单图像超分辨率和彩色图像去马赛克等多种逆问题。\n\n## 1. 环境准备\n\n本项目主要基于 **MATLAB** 和 **MatConvNet** 深度学习框架，并依赖 NVIDIA GPU 加速。\n\n### 系统要求\n- **操作系统**: Windows (推荐), Linux, macOS\n- **MATLAB 版本**: R2015b 或更高版本\n- **GPU**: 支持 CUDA 的 NVIDIA 显卡\n\n### 前置依赖\n请确保已安装以下软件及开发包：\n1. **Visual Studio**: 推荐 Visual Studio 2015 (用于编译 C\u002FC++ MEX 文件)。\n2. **CUDA Toolkit**: 版本 8.0 (推荐) 或兼容版本。\n3. **cuDNN**: 版本 5.1 (推荐) 或与 CUDA 8.0 匹配的版本。\n4. **MatConvNet**: 深度学习工具箱。\n\n> **国内加速提示**:\n> - CUDA 和 cuDNN 可从 NVIDIA 官网下载，若下载缓慢可尝试国内镜像站（如清华源、中科大源提供的部分资源）或社区搬运。\n> - MatConvNet 源码可从其官网或 GitHub 获取。\n\n## 2. 安装步骤\n\n以下以 **Windows 7\u002F10 64-bit** 为例，演示如何配置环境。Linux\u002FMac 用户请参考类似逻辑调整路径。\n\n### 第一步：安装 CUDA 和 cuDNN\n1. 下载并安装 **CUDA 8.0 GA2** (包含基础安装包和补丁包)。\n   - 默认安装路径通常为：`C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0`\n   - 确保环境变量 `CUDA_PATH` 已正确设置。\n2. 下载 **cuDNN v5.1** (需注册 NVIDIA 开发者账号)。\n   - 解压下载的压缩包，将其中的 `bin`, `include`, `lib` 文件夹内容复制到 CUDA 安装目录中对应文件夹内。\n   - *注意：安装完成后可能需要重启计算机。*\n\n### 第二步：部署 MatConvNet\n1. 下载 MatConvNet (例如 `matconvnet-1.0-beta25.tar.gz`)。\n2. 在 MATLAB 安装目录下创建文件夹 `matconvnet`，并将解压后的内容放入其中。\n   - 示例路径：`D:\\Program files\\MATLAB\\R2016b\\matconvnet\\matconvnet-1.0-beta25`\n\n### 第三步：编译 MatConvNet\n打开 MATLAB，在命令行窗口依次执行以下命令（**请根据实际安装路径修改代码中的路径**）：\n\n```matlab\n% 1. 配置 C 编译器 (选择 Visual Studio 2015)\nmex -setup\nmex -setup:'D:\\Program files\\MATLAB\\R2016b\\bin\\win64\\mexopts\\msvc2015.xml' C\n\n% 2. 配置 C++ 编译器\nmex -setup C++\nmex -setup:'D:\\Program files\\MATLAB\\R2016b\\bin\\win64\\mexopts\\msvcpp2015.xml' C++\n\n% 3. 进入 MatConvNet 目录并添加路径\ncd 'D:\\Program files\\MATLAB\\R2016b\\matconvnet\\matconvnet-1.0-beta25'\naddpath matlab\n\n% 4. 编译启用 GPU 和 cuDNN 支持\n% 请确保 cudaRoot 和 cudnnRoot 指向你的实际安装路径\nvl_compilenn('enableGpu', true, 'cudaMethod', 'nvcc', ...\n             'cudaRoot', 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0', ...\n             'enableCudnn', true, 'cudnnRoot', 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0');\n```\n\n编译成功后，终端会显示 `MEX completed successfully`。\n\n### 第四步：验证环境\n在 MATLAB 命令行输入以下命令检查 GPU 状态：\n\n```matlab\ngpuDevice\n```\n若输出包含 `Name: 'Tesla K20c'` (或其他显卡型号) 且 `ComputeCapability` 正常，则环境配置成功。\n\n## 3. 基本使用\n\nIRCNN 提供了多个演示脚本，可直接运行以体验不同功能。请确保已将项目根目录添加到 MATLAB 路径。\n\n### 场景一：图像去模糊 (Image Deblurring)\n利用其他盲去模糊方法估计出的核，使用 IRCNN 进行复原。\n```matlab\n% 运行真实应用演示脚本\nDemo_deblur_real_application\n```\n*效果：左侧为模糊图，右侧为 IRCNN 复原后的高清图。*\n\n### 场景二：图像修复 (Image Inpainting)\n修复图像中缺失或被遮挡的区域。\n```matlab\n% 运行标准修复演示\nDemo_inpaint\n\n% 或运行真实应用场景演示\nDemo_inpaint_real_application\n```\n\n### 场景三：单图像超分辨率 (Single Image Super-Resolution)\n支持三种退化模型（双三次插值、高斯模糊下采样、任意核下采样）。\n\n**示例：处理双三次退化模型 (Bicubic degradation)**\n```matlab\n% 针对 YCbCr 色彩空间\nDemo_SISR_YCbCr\n\n% 针对 RGB 色彩空间\nDemo_SISR_RGB\n```\n\n**示例：处理任意核下采样 (真实场景低分辨率图)**\n```matlab\nDemo_SISR_direct_downsampler_real_application\n```\n\n### 场景四：彩色图像去马赛克 (Color Image Demosaicking)\n从拜耳模式 (Bayer pattern) 图像恢复全彩图像。\n```matlab\nDemo_demosaiking\n```\n\n---\n**提示**: 所有演示脚本均位于项目根目录，直接运行即可看到对比结果图。如需处理自定义图片，可参考这些 `.m` 文件的内部代码逻辑进行修改。","某安防监控团队在处理夜间低光照环境下抓拍的车辆牌照时，面临图像因运动模糊和噪点干扰而难以识别的难题。\n\n### 没有 IRCNN 时\n- **模型泛化能力差**：针对去噪、去模糊等不同任务需分别训练专用模型，一旦场景变化（如噪声类型改变），原有模型即刻失效，重新训练成本极高。\n- **处理速度与质量难兼得**：传统的基于模型优化方法虽能灵活应对多种退化情况，但迭代计算耗时过长，无法满足实时视频流的处理需求。\n- **细节恢复不足**：判别式学习方法虽然速度快，但往往过度平滑图像，导致车牌边缘纹理丢失，后续 OCR 识别率大幅下降。\n- **系统架构臃肿**：需要维护多套独立的算法库来应对不同的图像复原需求，增加了工程部署和维护的复杂度。\n\n### 使用 IRCNN 后\n- **一套模型通吃多任务**：利用变量分裂技术，将训练好的深度 CNN 去噪器作为通用先验模块，无需额外训练即可直接解决去模糊、超分辨率及图像修复等多种问题。\n- **实时性与高画质并存**：结合了判别式学习的快速推理优势与模型优化方法的灵活性，在毫秒级内完成高清复原，满足实时监控要求。\n- **纹理细节精准重建**：IRCNN 能有效去除高斯噪声的同时保留高频边缘信息，显著提升了模糊车牌的字符清晰度，OCR 识别准确率大幅提升。\n- **架构轻量化**：仅需集成单一的去噪器模块即可构建通用的图像复原流水线，极大简化了系统架构，降低了算力资源占用。\n\nIRCNN 通过将深度学习去噪器巧妙嵌入传统优化框架，实现了“一次训练，多任务通用”，彻底打破了低层视觉任务中速度与质量的博弈僵局。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcszn_IRCNN_16d3df64.png","cszn","Kai Zhang","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fcszn_02895d4d.png","Image Restoration; Inverse Problems","Nanjing University","Nanjing","cskaizhang@gmail.com",null,"https:\u002F\u002Fcszn.github.io\u002F","https:\u002F\u002Fgithub.com\u002Fcszn",[86,90],{"name":87,"color":88,"percentage":89},"MATLAB","#e16737",99.9,{"name":91,"color":82,"percentage":92},"M",0.1,610,172,"2026-03-30T01:12:28",5,"Windows","必需 NVIDIA GPU，需安装 CUDA 8.0 和 cuDNN v5.1（示例中提及 Tesla K20c）","未说明",{"notes":101,"python":102,"dependencies":103},"该项目主要基于 MATLAB 和 MatConvNet 框架，而非 Python\u002FPyTorch（README 中提到的 PyTorch 版本指向另一个仓库 DPIR）。在 Windows 上运行需预先安装 Visual Studio 2015 以编译 MEX 文件，并正确配置 CUDA 和 cuDNN 的环境变量。首次使用前需在 MATLAB 中运行编译命令以启用 GPU 支持。","不适用 (基于 MATLAB)",[104,105,106,107,108],"MATLAB R2015b+","CUDA Toolkit 8.0","cuDNN v5.1","MatConvNet 1.0-beta25","Visual Studio 2015",[14],[111,112,113,114,115,116,117],"image-deblurring","image-restoration","image-denoising","single-image-super-resolution","image-inpainting","color-demosaicking","deep-model","2026-03-27T02:49:30.150509","2026-04-06T05:16:51.655175",[121,126,131,136,141,146,151,156,161],{"id":122,"question_zh":123,"answer_zh":124,"source_url":125},12175,"运行 Demo_deblur_real_application 时遇到 'edgetaper' 错误，提示 PSF 不能包含零值怎么办？","这是 MATLAB 版本兼容性问题。新版 MATLAB 的 edgetaper 函数不允许模糊核（kernel\u002FPSF）包含 0 值。解决方法有两种：\n1. 修改代码，将模糊核中的 0 替换为极小值：k(k==0) = 1e-10;\n2. 不使用 edgetaper 函数。作者已更新代码，请参考最新的 Demo_deblur_real_application.m，并注意需要添加 utilities 目录下的两个辅助函数：wrap_boundary_liu.m 和 opt_fft_size.m。","https:\u002F\u002Fgithub.com\u002Fcszn\u002FIRCNN\u002Fissues\u002F10",{"id":127,"question_zh":128,"answer_zh":129,"source_url":130},12176,"运行代码时报错 'Undefined function or variable vl_simplenn_tidy'，是否必须使用支持 CUDA 的 GPU？","不需要必须使用支持 CUDA 的 GPU，即使设置 use GPU = 0 也会报此错是因为缺少依赖库。你需要先安装 MatConvNet 工具箱。请访问 http:\u002F\u002Fwww.vlfeat.org\u002Fmatconvnet\u002F 下载并安装。","https:\u002F\u002Fgithub.com\u002Fcszn\u002FIRCNN\u002Fissues\u002F6",{"id":132,"question_zh":133,"answer_zh":134,"source_url":135},12177,"该项目推荐使用哪个版本的 MatConvNet？","官方推荐使用 MatConvNet 1.0-beta21 版本。虽然也有用户反馈 beta 24 版本可以运行，但为避免崩溃，建议优先使用 beta 21。下载地址：http:\u002F\u002Fwww.vlfeat.org\u002Fmatconvnet\u002Fdownload\u002F","https:\u002F\u002Fgithub.com\u002Fcszn\u002FIRCNN\u002Fissues\u002F1",{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},12178,"如何在基准数据集（如 Set5, Set14）上测试噪声图像的超分辨率（SISR）结果？","请使用脚本 `Demo_SISR_direct_downsampler_real_application.m` 来生成超分辨率结果。该脚本专门用于处理直接下采样产生的噪声图像超分任务。","https:\u002F\u002Fgithub.com\u002Fcszn\u002FIRCNN\u002Fissues\u002F16",{"id":142,"question_zh":143,"answer_zh":144,"source_url":145},12179,"对于真实世界的模糊图像，如果模糊核（PSF）和噪声水平均未知，该如何处理？","1. 关于模糊核估计：可以参考 Issue #5 中的讨论（通常涉及盲去卷积算法）。\n2. 关于噪声水平估计：建议使用网格搜索（grid search）方法，尝试不同的噪声水平参数，找到视觉效果最佳或指标最优的那个值。","https:\u002F\u002Fgithub.com\u002Fcszn\u002FIRCNN\u002Fissues\u002F15",{"id":147,"question_zh":148,"answer_zh":149,"source_url":150},12180,"如何从非数据集的普通图片中获取盲模糊核（blind kernel）？","请参考 Issue #5 中的相关讨论和方法，那里提供了从单张图片估计模糊核的指导。","https:\u002F\u002Fgithub.com\u002Fcszn\u002FIRCNN\u002Fissues\u002F12",{"id":152,"question_zh":153,"answer_zh":154,"source_url":155},12181,"项目是否提供训练代码？DnCNN 的训练代码是否适用于 IRCNN？","你只需要训练去噪器（denoiser）。对于去模糊、超分辨率、图像修复和去马赛克等任务，本项目不需要单独的训练过程，它们是利用训练好的去噪器通过迭代方式解决的。DnCNN 的训练代码可用于训练底层的去噪模块。","https:\u002F\u002Fgithub.com\u002Fcszn\u002FIRCNN\u002Fissues\u002F14",{"id":157,"question_zh":158,"answer_zh":159,"source_url":160},12182,"如果想复现论文中使用 Bicubic 下采样器生成的含噪低分辨率图像的超分结果，应该用哪个脚本？","请使用 `Demo_SISR_RGB.m` 脚本来获取此类设置下的超分辨率结果。","https:\u002F\u002Fgithub.com\u002Fcszn\u002FIRCNN\u002Fissues\u002F17",{"id":162,"question_zh":163,"answer_zh":164,"source_url":165},12183,"是否有非 MATLAB 版本（如 Python\u002FPyTorch）的代码实现？","维护者计划发布 PyTorch 版本的代码，请持续关注项目更新。","https:\u002F\u002Fgithub.com\u002Fcszn\u002FIRCNN\u002Fissues\u002F27",[]]