图像算法原理与实践——图像修复之全变分模型二阶

在图像算法的高层次处理中,有一类很典型的应用,就是图像修复算法。图像在采集、传输、预处理过程中,都可能会发生图像数据被修改、损失和缺失等问题(例如:部分图像内容被污染、雾霾等),另外,在实际室外拍照的时候,可能会将用户不想需要的对象(例如:路人甲等)也摄入照片影像中,需要将这多余图像内容去除。这一类的图像处理算法可以统称为 图像修复,对污染后的图像进行去噪、修补、变换等操作还原原始图像内容。在图像修复中最主要的一类处理就是 图像修补,就是将图像中一小块被污染的区域通过各种算法尽量还原成原始图像。

如果图像中需要修复的区域都比较小,一个常见的算法就是将需要修复区域的邻边像素进行扩散,填补需要修复的区域,从而达到图像修补的目的。

图像修补基本概念

在一幅需要修复的图像 中,我们将整幅图像用F表示,需要修复的区域块称之为靶区域,用符号D来表示,保留原始图像信息的区域(F-D)称之为源区域。

例如:在如下图像中,有一块被红色污损的区域,这里我们将红色区域称之为靶区域,除了红色区域以外的图像区域,称之为源区域。而我们的传统图像修复算法,就是利用靶区域附近的源像素数据,经过变换拟合来逐渐填充靶区域的像素,从而达到图像修补的效果。

污损图像

全变分模型原理

关于全变分模型的公式推断比较复杂,主要依据欧拉-拉格朗日方程,这里不再详述,直接提供手工推到过程。

欧拉-拉格朗日方程推导

算法步骤

全变分模型主要采用迭代的方式,逐步填充需要修补的区域,直至将所有靶区域像素全部填充完成。

令 是原始图像数据, 是每次迭代的图像数据

1、初始时

2、接下来每次迭代时:

这里 三个是迭代的参数

3、根据上面公式循环迭代操作 ,可以设置迭代的次数,最后一次的 是最终结果图像数据。

代码实现

这里提供一个简单的全变分图像修补算法。

int32_t XImage::DenoizeTotalVariation(int32_t iterate_count,double_t dt,double_t epsilon,double_t lambda,XImage& out_img ){int32_t x, y, k;int32_t ret = 0;if (!image_valid_){return XERR_BAD_STATE;}

// 将原始图像数据转换成灰度图,再归一化到二维矩阵中uint8_t* line_data = image_data_;k = 0;for (y = 0; y < height_; y++){uint8_t* rgb_data = line_data;for (x = 0; x < width_; x++){uint32_t R = rgb_data[0] * 77;uint32_t G = rgb_data[1] * 151;uint32_t B = rgb_data[2] * 28;uint32_t gray = (R + G + B) >> 8;mtx_org[k] = (double_t)(gray / 255.0f);mtx_src[k] = mtx_org[k];mtx_dst[k] = mtx_org[k];

k++;rgb_data += pixel_bytes_;}

line_data += line_bytes_;}

int32_t x_end = (width_ - 1);int32_t y_end = (height_ - 1);double_t epsilon_pwr2 = epsilon * epsilon;double_t *org_data, *src_data, *dst_data;

for (k = 0; k < iterate_count; k++){org_data = mtx_org;src_data = mtx_src;dst_data = mtx_dst;

// 进行一次迭代操作for (y = 0; y < height_; y++){for (x = 0; x < width_; x++){double_t dbl_center_data = src_data[0] * 2.0f;double_t fourfold_center_data = src_data[0] * 4.0f;int32_t up = y - 1;int32_t down = y + 1;int32_t left = x - 1;int32_t right = x + 1;if (up < 0) up = 0;if (down >= height_) down = y;if (left < 0) left = 0;if (right >= width_) right = x;

double_t* left_data = src_data - 1;double_t* right_data = src_data + 1;double_t* up_data = src_data - width_;double_t* dn_data = src_data + width_;if (x == 0) left_data = src_data;if (x == x_end) right_data = src_data;if (y == 0) up_data = src_data;if (y == y_end) dn_data = src_data;

// 对x求一阶偏导double_t pd_x = (right_data[0] - left_data[0]) / 2;

// 对y求一阶偏导double_t pd_y = (dn_data[0] - up_data[0]) / 2;

// 对x求二阶偏导double_t pd_xx = (right_data[0] + left_data[0]) - dbl_center_data;

// 对y求二阶偏导double_t pd_yy = (up_data[0] + dn_data[0]) - dbl_center_data;

// 先对x再对y求二阶偏导double_t pd_xy = (right_data[0] + left_data[0] + up_data[0] + dn_data[0]) - fourfold_center_data;

double_t pd_x_pwr2 = pd_x * pd_x;double_t pd_y_pwr2 = pd_y * pd_y;double_t temp_num = pd_yy * (pd_x_pwr2 + epsilon_pwr2) + pd_xx * (pd_y_pwr2 + epsilon_pwr2) - (2 * pd_x * pd_y * pd_xy);double_t temp_den = (pd_x_pwr2 + pd_y_pwr2 + epsilon_pwr2);//temp_den = pow(temp_den, 1.5);temp_den = temp_den * temp_den * temp_den;temp_den = sqrt(temp_den);

dst_data[0] += dt * (temp_num / temp_den + lambda*(org_data[0] - src_data[0]));

org_data++;src_data++;dst_data++;}}

// 当次迭代结果数据 作为下一次迭代的源数据memcpy(mtx_src, mtx_dst, pixel_count*sizeof(double_t));

} // 迭代次数完成

return XOK;}

总结

本章节主要描述全变分模型的图像去噪和修复效果,在正常应用中,如果对整个图像数据进行全变分迭代,则可以达到图像去噪的效果;如果仅仅对污损区域进行全变分迭代处理,则可以达到污损区域修复效果。不过在实际应用中,全变分模型仅仅适合非常细小区域的修补,对于大块污损区域的修补效果并不好,需要采用后续讲解到的其他的方法。

作者: 华叔-视觉魔术师

|深延科技|

深延科技成立于2018年,是深兰科技(DeepBlue)旗下的子公司,以“人工智能赋能企业与行业”为使命,助力合作伙伴降低成本、提升效率并挖掘更多商业机会,进一步开拓市场,服务民生。公司推出四款平台产品——深延智能数据标注平台、深延AI开发平台、深延自动化机器学习平台、深延AI开放平台,涵盖从数据标注及处理,到模型构建,再到行业应用和解决方案的全流程服务,一站式助力企业“AI”化。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

THE END
0.乙醇脱氢酶的简介脱氢酶的基本概念介绍 脱氢酶,是指一类能催化物质(如糖类、有机酸、氨基酸)进行氧化还原反应的酶,在酶学分类中属于氧化还原酶类。反应中被氧化的底物称为氢供体或电子供体,被还原的底物称为氢受体或电子受体。当受体是氧气时,催化该反应的酶称为氧化酶,其他情况下都称为脱氢酶。不同的脱氢酶几乎都根据其底物的jvzquC41ykqj0jsvrgjjc7hqo1gsvrhng/887B8:7/912
1.火电企业群体超标排污制造雾霾遭重罚?事实真相是…生态纵观整篇报道,却刻意模糊“达标排放”概念,将“达到排放限值”与“达到环保标准”、“没收对应环保电价补贴”与“偷排超排环保处罚”互相混淆,甚至还进一步引申到所有燃煤机组成百倍偷排这样耸人听闻的臆测之中,言语夸张,情绪激昂,对公众形成强烈误导。再进一步联系到最近出现的“烟气脱硫产生雾霾”、“天然气产生雾霾jvzq<84gpx4qgxung0ipo7hp1p704969127268h3236.4B5453850qyon
2.数据通信的概念范文本课程主要内容包括:数据通信的基本概念和基本特点、常用的同步技术和复用技术、数据传输模式、基带传输的基础知识、协议及其作用、数据链路及传输控制的基本知识数据链路控制规范、数据通信设备和传输介质、数据通信网络的概念和拓扑结构、路由选择、局域网技术理论基础等。 jvzquC41yy}/i€~qq0ipo8mcqyko1:;84;6/j}rn
3.智能优化算法遗传算法——轮盘赌选择(matlab实现)二、遗传学基本概念与术语 基因型(genotype):性状染色体的内部表现; 表现型(phenotype):染色体决定性状的外部表现,或者说,根据基因型形成的个体; 进化(evolution):逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。 适应度(fitness):度量某个物种对于生存环境的适应程度。 jvzquC41dnuh0lxfp0tfv8|gkzooa=9553:138ftvkimg8igvcomu862:878:;<
4.行政强制法通用12篇本文从探讨行政管理中代履行制度的应用角度出发,阐述了代履行制度的基本概念、代履行的三方法律关系和代履行应遵循的四大原则,分析了代履行制度在我国法律实践中存在的问题,提出了完善代履行制度的若干建议。 【关键词】 行政管理;代履行;制度完善 一、代履行概述 jvzq<84|ilmis7}wgunv0lto1jgpyns145<497mvon
5.多中心理论和开放式景区一、多中心的概念以及基本假设多中心作为一个概念,包含着一种审视政治、经济以及社会秩序的独特方法。 ③“多中心”(Polycent2 rity)一词最早是由迈克尔・博兰尼在《自由的逻辑》中使用的。 浅析多中心发展的理论及实施路径 2017年1月3日,国务院印发了《全国国土规划纲要(2016—2030年)》(以下简称《纲要》)。 jvzquC41o0972mteu0tfv8iqe17139<:87670qyon
6.观察视角下的幼儿园生成课程有效开展的策略与途径1. 生成课程的概念 “生成”课程虽然被幼教指南提及,并受到各教育管理机构和各幼儿园的关注[2-4],但课程的生成点有哪些,又是从何而来呢?这需要我们从生成课程的基本概念出发。《上海市学前教育课程指南》中认为“生成课程”是“幼儿依据自己的兴趣、经验和需要,在与环境和他人交互作用中自主产生的活动。”“也指jvzq<84yyy4djrscsmooi7hqo1d1;5431915A;370nuou
7.机械制造基础论文大全11篇例如在讲授机床设计时,金属切削机床设计的基本理论,如机床的工作原理、几何表面的形成原理和机床的成形运动等,是我们学习的重点。在讲授夹具设计时,机床夹具的六点定位原理,完全定位、不完全定位、过定位和欠定位等基本概念是我们讲课的重点。 2.增加专业特色内容jvzquC41yy}/hjgkcq4dqv3ep1nbq€jp14::4:3jvor
8.电商训练营网店运营第1章:主要介绍网店运营前的一些准备工作,包括网店运营的基本概念、工作职责,网店定位以及商品分析、目标客户分析、竞争对手分析的方法。 第2章~第9章:主要结合店铺与品牌的推广、爆款打造、店铺的优化与管理、淘宝促销活动提升销量、站内与站外联合推广、网店数据分析、淘宝SEO搜索引擎优化等实操案例,详细解读网店运营jvzquC41yy}/gyzdkv4dqv4dqqqEg}fknuEjfFZD8e<:4n7667;6c
9.铁路安全论文15篇①在安全风险研判过程中,一些车间、部门基本概念不清,不深入调研,主观臆断,确定的风险项点不全,制定的措施缺乏科学性、可操作性和针对性。②与日常工作结合不紧密,尤其是与安全质量管理体制结合上思考不够。 2.2安全风险管理体系有待完善 安全风险管理运作机制不够健全,相关制度标准不够完善;各级管理人员、一线职工普jvzquC41yy}/jjtskmgo0lto1hgoyns144<397mvon