重庆璧山网站制作公司推荐我想带货怎么找货源

news/2025/10/2 5:37:34/文章来源:
重庆璧山网站制作公司推荐,我想带货怎么找货源,wordpress+acg主题,学做蛋糕什么网站前言 最近做换脸#xff0c;在肤色调整的那一块#xff0c;看到一个有意思的文章#xff0c;复现一波玩玩。不过最后一步掉链子了#xff0c;有兴趣的可以一起讨论把链子补上。 主要是github上大佬的那个复现代码和原文有点差异#xff0c;而且代码复杂度过高#xff0…前言 最近做换脸在肤色调整的那一块看到一个有意思的文章复现一波玩玩。不过最后一步掉链子了有兴趣的可以一起讨论把链子补上。 主要是github上大佬的那个复现代码和原文有点差异而且代码复杂度过高阅读费劲这里为了清晰理解理论知识就一步一步按照论文的每个章节走不过有很大一部分代码都借鉴大佬了。 国际惯例参考文献 论文《Color Harmonization》 opencv超像素分割 大佬的实现 简介 这篇论文主要干啥呢看下图 注意小姑凉的衣服的颜色从左边的原图变成了右边的变化了的图片。 那么论文的工作就是在尽量保持原色的基础上调整图片颜色使得图片整体颜色看起来更加协调。 基本原理就是将RGB图像转成HSV然后调整色相(hue)直方图。下图中左边的彩色圆环代表原始图片的色相直方图右边为论文调整后的色相直方图。 感觉这个论文用来去除杂色应该挺有用不过更好玩的是能交互式自动调色。 【注】要知道色度hue的范围是0°∼360°0°\sim360°0°∼360° opencv里面提取出来的是0°∼180°0°\sim 180°0°∼180° 流程复现 环境python3、opencv-python3.4.2.16、opencv-contrib-python3.4.2.16 注意如果找不到ximgproc手动卸载opencv-contrib-python再重新安装自动卸载安装无法解决问题。 颜色模板 首先文章介绍了8种比较适合用于调色的模板注意灰色区域的大小固定但是位置不是固定的可以绕着圆心旋转。 当图像的色相都落在灰色区域就是颜色处理的比较好的图像。 文末介绍了每个模板的灰色区域面积比 模板中大的扇形区域V,Y,X占26%的面积角度是93.6°93.6°93.6° 模板中小的扇形区域i,L,I,Y占5%的面积角度是18°18°18° 模板L占22%面积角度是79.0°79.0°79.0° 模板T占50%面积角度是180°180°180° 模板I,X,Y的两个扇形区的夹角是180°180°180° 模板L两个扇形区的夹角是90°90°90° 不过大佬已经把这部分列出来了两个数第一个是扇形区域的中心第二个是扇形区域的宽度 #定义模板,分别定义的中心与边界偏转角度 HueTemplates {i : [( 0.00, 0.05)],V : [( 0.00, 0.26)],L : [( 0.00, 0.05), ( 0.25, 0.22)],mirror_L: [( 0.00, 0.05), (-0.25, 0.22)],I : [( 0.00, 0.05), ( 0.50, 0.05)],T : [( 0.25, 0.50)],Y : [( 0.00, 0.26), ( 0.50, 0.05)],X : [( 0.00, 0.26), ( 0.50, 0.26)], }随便显示一个瞅瞅 #预览模板 def show_temp(template_name,template_alpha):canvas np.zeros((canvas_h, canvas_w, 3)) #画布cv2.circle(canvas, (yc, xc), circle_r, (255,255,255), -1) #画圆for t in HueTemplates[template_name]:center t[0]*360 template_alphawidth t[1]*360start center - width/2end center width/2cv2.ellipse(canvas,(yc,xc),(circle_r,circle_r),0,start,end,(0,0,0),-1,cv2.LINE_AA)cv2.circle(canvas, (yc, xc), 10, (0,0,0), -1,cv2.LINE_AA) #画中心点canvas np.array(canvas,np.uint8) canvas cv2.cvtColor(canvas,cv2.COLOR_BGR2RGB)return canvasplt.imsave(./temp/show_temp.png,show_temp(X,90),cmapgray)色相直方图 就是单纯的将图像的H通道提取出来看看像素个数。 def count_hue_histogram(X):N 360H X[:, :, 0].astype(np.int32) * 2 H_flat H.flatten()histo np.zeros(N)for i in range(N):histo[i] np.sum(H_flati);return histo然后把它画到一个环上 canvas_h 600 #画布高度 canvas_w 600 #画布宽度 yc int(canvas_h/2) #圆心位置y xc int(canvas_w/2) #圆心位置x circle_r 250 #半径 def draw_polar_histogram(histo):N 360histo histo.astype(float)histo / np.max(histo)histo * circle_rcanvas np.zeros((canvas_h, canvas_w, 3)) #画布cv2.circle(canvas, (yc, xc), circle_r, (255,255,255), -1) #画圆for i in range(N):theta -i * np.pi / 180 #各个hue的弧度count histo[i] #各个hue的数目#当前hue的柱子y1 yc - int(circle_r * np.sin(theta))x1 xc int(circle_r * np.cos(theta))y2 yc - int((circle_r-histo[i]) * np.sin(theta))x2 xc int((circle_r-histo[i]) * np.cos(theta))color_HSV np.zeros((1,1,3), dtypenp.uint8)color_HSV[0,0,:] [int(i/2),255,255] #每个角度的Hcolor_BGR cv2.cvtColor(color_HSV, cv2.COLOR_HSV2BGR) #将HSV转换为BGRB int(color_BGR[0,0,0])G int(color_BGR[0,0,1])R int(color_BGR[0,0,2])cv2.line(canvas, (x1,y1), (x2,y2), (B,G,R), 3,cv2.LINE_AA) #画柱子canvas cv2.circle(canvas, (yc, xc), 5, (0,0,0), -1) #圆心canvas np.array(canvas,np.uint8)canvas cv2.cvtColor(canvas,cv2.COLOR_BGR2RGB)return canvas测试代码 img_rgb cv2.imread(peacock.png) img_hsv cv2.cvtColor(img_rgb,cv2.COLOR_BGR2HSV) h_hist count_hue_histogram(img_hsv) img_hue img_hsv[...,0].copy()*2.0 img_sat img_hsv[...,1].copy()/2.55 hist_img draw_polar_histogram(h_hist) plt.imsave(./temp/hist_img.png,hist_img)图像评分 正式进入论文第3章节根据图像的色相与每个模板扇形区域的边界的最小距离以及每个像素的饱和度来计算得分公式为 F(x,(m,α))∑p∈X∣∣H(p)−ETm(α)(p)∣∣⋅S(p)F(x,(m,\alpha))\sum_{p\in X}||H(p)-E_{T_m(\alpha)}(p)||\cdot S(p) F(x,(m,α))p∈X∑​∣∣H(p)−ETm​(α)​(p)∣∣⋅S(p) X代表图像p代表图像每个像素位置的色度值(Hue)ETm(α)(p)E_{T_m(\alpha)}(p)ETm​(α)​(p)代表色度值p与扇形区域最接近的边界S(p)S(p)S(p)代表HSV中的饱和度S 接下来先看某个模板中0°∼360°0°\sim360°0°∼360°每个色相与边界的最短距离(角度值差)如果色相在模板的扇形区域内距离为000 #圆弧距在hue圆上的角度差 def deg_distance(a, b):d1 np.abs(a - b)d2 np.abs(360-d1)d np.minimum(d1, d2)return d #是否在区域内 def in_border(h,center,width):return deg_distance(h,center)width/2 #区域外的h计算最近边界的圆弧距 def dist_to_border(h,border):H1deg_distance(h,border[0]) H2deg_distance(h,border[1]) H_dist2bdr np.minimum(H1,H2)return H_dist2bdr #计算当前模板的每个hue值的加权 def hue_weight(temp_name,alpha):hweight []h np.arange(360)for t in HueTemplates[temp_name]:center t[0]*360 alpha #中心位置width t[1]*360 #宽度border [center - width/2,center width/2] #起止位置temp_dist dist_to_border(h,border) #色相与当前边界的距离temp_dist[in_border(h,center,width)]0 hweight.append(temp_dist)hweight np.array(hweight)hweight hweight.min(axis0)return hweight接下来计算第一项 ∣∣H(p)−ETm(α)(p)∣∣||H(p)-E_{T_m(\alpha)}(p)|| ∣∣H(p)−ETm​(α)​(p)∣∣ 直接将图像H值换成对应的最近边界距离即可 # 利用template的hue权重对图像的hue直方图进行加权 def h_dist(img_h,temp_name,alpha):score np.zeros((img_h.shape[0],img_h.shape[1]),dtypenp.float32)hw hue_weight(temp_name,alpha)for i in range(360):score[img_hi] hw[i]return score再跟饱和度一起把图像与每个模板对应的得分都计算出来 #计算最小的模板得分 def cal_scores(img_hue,img_s):scores np.zeros((len(HueTemplates.keys()),360),dtypenp.float32)temp_keys list(HueTemplates.keys())for i in range(len(temp_keys)):#遍历模板print(temp_keys,temp_keys[i])for alpha in range(360):#每个旋转角度scores[i,alpha]np.sum(np.multiply(h_dist(img_hue,temp_keys[i],alpha),img_s))return scores提取最好的那个模板和角度使得当前的图像得分最大 # 计算每个模板的得分 hue_scores cal_scores(img_hue,img_sat) #得到最好的template和alpha [best_m,betst_alpha] np.unravel_index(np.argmin(hue_scores),hue_scores.shape)temp_keys i temp_keys V temp_keys L temp_keys mirror_L temp_keys I temp_keys T temp_keys Y temp_keys X把最好的模板、旋转角度与对应图像色相直方图放一起显示一波瞅瞅 #画图 hist_img draw_polar_histogram(h_hist) temp_keys list(HueTemplates.keys()) print(temp_keys[best_m],betst_alpha) temp_img show_temp(temp_keys[best_m],betst_alpha) overlay_img cv2.addWeighted(temp_img,0.2,hist_img,1-0.2,0) plt.figure(figsize(8,8)) plt.imshow(overlay_img) plt.imsave(./temp/overlay_img.png,overlay_img)T 46图像分割 上面有些模板有两个对称扇形这两个扇形代表互补色也就是颜色差距很大但是当我们把扇形外面的像素压到扇形里面去的时候中间的一些颜色到两个扇形的距离差不多这时候就会出现相似的颜色被压到了完全不同的颜色。如下图所示 看(d)图两个箭头从同一个位置出发但是这个位置的色相到两个扇形的距离差不多这时候如果随机分配颜色就会出现孔雀脖子上相似的颜色被压到完全不同的两个颜色里面去了。 这时候我们就需要对每个像素指定他所压缩的扇形并且要保证图像比较连续的区域的颜色不要被压的不连续了那么就可以先对图像每个像素进行二分类当有两个扇形的时候像素标签为0或10或10或1 分别表示应该被划分到哪个区域。 文章的算法貌似比较耗时大佬使用了opencv里面的一个超像素块划分方法参考文档看前言。这个超像素块划分有点类似于目标分割达到的效果如下 原图戳这里 可以看出来连续区域基本被划分到一块了。每一块都被标记为一个单独的类别。 我们现在要把这一对类别合并起来变成两个类别。 分割流程大致可以分为这样 先不看颜色的连续性单纯计算每个像素的色相到哪个扇形区域最近先为每个像素单独打标签 #先计算每个像素到哪个扇形区域距离最短 def class_pix(h,temp_name,alpha):# 先计算当前模板下每个hue对应哪个扇区img_labelnp.zeros((h.shape[0],h.shape[1]),dtypenp.int32)hlabels []hue_standnp.arange(360)#扇区里外一起处理某个扇区内的距离自己的扇区边界更近for t in HueTemplates[temp_name]:center t[0]*360 alpha #中心位置width t[1]*360 #宽度border [center - width/2,center width/2] #起止位置temp_dist dist_to_border(hue_stand,border) #hue与当前扇区边界的距离不要排除扇区内的hue的计算hlabels.append(temp_dist)hlabels np.array(hlabels)hlabel hlabels.argmin(axis0)#再把图像的hue转换为对应扇区标签for i in range(360):img_label[hi]hlabel[i]return img_label然后再统计opencv划分的每个超像素块里面的像素标签哪个多就把当前超像素的标签置为谁 #制作每个像素的标签确定每个像素往哪个扇区shift def split_img(img_hsv,img_h,temp_name,alpha):num_superpixels200h_cls class_pix(img_hue,temp_name,alpha)SEEDS cv2.ximgproc.createSuperpixelSEEDS(img_hsv.shape[1],img_hsv.shape[0],img_hsv.shape[2],num_superpixels,10)SEEDS.iterate(img_hsv,4)Vnp.zeros((img_hue.shape))NV.shape[0]grid_num SEEDS.getNumberOfSuperpixels() #超像素块个数labels SEEDS.getLabels() #原图每个像素的属于哪个超像素块(标签)for i in range(grid_num):P[[],[]]snp.average(h_cls[labelsi]) #当前超像素块的所有hue的标签的均值if(s0.5):#像素块大部分朝哪个扇区就确定是哪个扇区s1else:s0h_cls[labelsi]sreturn h_cls这两个函数就保证了颜色又连续每个颜色被压缩的距离又最小色差变化不会太大。 压色相 每个像素往哪个扇形块压我们都知道了那就执行最后一步把像素按照下式压到对应扇形区域去 H′(p)C(p)w2(1−Gσ(∣∣H(p)−C(p)∣∣))H(p)C(p)\frac{w}{2}(1-G_\sigma(||H(p)-C(p)||)) H′(p)C(p)2w​(1−Gσ​(∣∣H(p)−C(p)∣∣)) 上式中C(p)代表扇形区域的中心www代表扇形区域的宽度GσG_\sigmaGσ​代表标准高斯函数均值为0方差为σ\sigmaσ作者建议这个方差σ\sigmaσ 等于w2\frac{w}{2}2w​ 那么先把高斯函数写出来呗 1(2π)σe−12(x−μσ)2\frac{1}{\sqrt{(2\pi)}\sigma}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} (2π)​σ1​e−21​(σx−μ​)2 #标准正态分布采样 def normalized_gaussian(X,mu,sigma):Xnp.asarray(X).astype(np.float64)sigmanp.asarray(sigma).astype(np.float64)muX-muM2np.multiply(mu,mu)S2np.multiply(sigma,sigma)return (1/(sigma*np.sqrt(2*np.pi)))*np.exp(-M2/(2*S2))最后一步根据H′(p)H(p)H′(p)的公式压色相值 # 对每个标签块分别shift到对应扇区 def hue_shift(img_hsv,temp_name,alpha):img_hue img_hsv[...,0].copy()*2.0new_img_hue np.zeros_like(img_hue)h_cls split_img(img_hsv,img_hue,temp_name,alpha) #确定每个像素对应的扇区i0for t in HueTemplates[temp_name]: #每个扇区分别处理center t[0]*360 alphawidth t[1]*360mask (h_clsi) #当前扇区所对应的所有标签temp_hue img_hue*mask #排除其他扇区超像素块的干扰center_dist deg_distance(temp_hue,center)G normalized_gaussian(center_dist,0,width/2)new_h center (1-G)*width/2new_img_huenew_img_huenew_h*maskii1new_img_hsv img_hsv.copy()new_img_hsv[...,0]new_img_hueresult_img cv2.cvtColor(new_img_hsv,cv2.COLOR_HSV2RGB)return result_img搞定 可视化看看结果 temp_nametemp_keys[best_m] alphabetst_alpha plt.imshow(hue_shift(img_hsv,temp_name,alpha))嗯真心绿。 其实还有更好玩的自己随便指定一个template和alpha能玩一天比如 temp_nameX#temp_keys[best_m] alphabetst_alpha plt.imshow(hue_shift(img_hsv,temp_name,alpha)) plt.imsave(./temp/result1.png,hue_shift(img_hsv,temp_name,alpha))问题 最后一步的实现应该有问题和大佬的代码有点出入可能我对论文的最后一步理解有遗漏后面再来查缺补漏吧。有大神看论文以后也可以在这个基础上完善一下。 博客代码下载 链接https://pan.baidu.com/s/1DavXVylYx3Sd0K-LygnBoQ 提取码ub0n 本文已经同步到微信公众号中公众号与本博客将持续同步更新运动捕捉、机器学习、深度学习、计算机视觉算法敬请关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做网站感觉挣不到钱啊答题小程序免费制作平台

把常见的几个记牢,不要在比赛时纠结。 错误2:输入文件未找到。 错误106:数据读入的格式错误,往往是读入语句出错。 错误200:被零除。 错误201:范围检查错误,数组越界。 错误202:栈溢…

CF2150D

挺有意思的计数题,希望下次可以做出来类似的题目。 一个显然的转化是把 \(p\) 数组转换成记录每个位置的人数的 \(f\) 数组,于是我们需要求每种情况下的 \(\sum f_i a_i\) 。 首先需要一些观察,初始 \(f\) 数组每个…

手机网站 英文南京网站制作搭建

描述 输入 输入共n1行 第一行输入矩阵的总个数n[2,1000] 后n行分别输入矩阵的维数[1,100] 输出 最后一行输出少乘法次数 输入样例 1 6 30 35 35 15 15 5 5 10 10 20 20 25 输出样例1 15125 代码实现 #include<iostream> #include<vector> #include<…

重庆江北网站建设怎么做免费视频网站

High-Speed Tracking with Kernelized Correlation Filters 使用内核化相关滤波器进行高速跟踪 大多数现代跟踪器的核心组件是判别分类器&#xff0c;其任务是区分目标和周围环境。为了应对自然图像变化&#xff0c;此分类器通常使用平移和缩放的样本补丁进行训练。此类样本集…

网站建设logo要什么格式网站广告连接如何做

一、运动积木概念 在Scratch编程中&#xff0c;运动积木是至关重要的一类积木&#xff0c;它能使我们的角色动起来&#xff01;运动积木是创造动感项目的关键。 二、运动积木的位置 点击左上角的“代码”按钮&#xff0c;然后在界面最左边找到“运动”按钮&#xff0c;这个按…

网站访问工具网站检测器

Python学习之路-Flask项目:博客前台 前言 前一篇完成了项目开发前的所有准备工作&#xff0c;本篇将完成整个博客的前台相关工作。 首页 前言 首页主要为我们提供各个分类入口已经按时间顺序的文章列表和列表排行等数据&#xff0c;是进入博客中第一眼看到的&#xff0c;接…

建设厅网站贵州人事考试信息网提供手机网站制作公司

目录 一、LiveData的基本使用1. 使用方式一2. 使用方式二3. 使用方式三 二、LiveData 去除黏性数据的方法1. 去除黏性的Java版本2. 去除黏性的Kotlin版本 一、LiveData的基本使用 1. 使用方式一 MyLiveData.kt package com.example.mylivedata.simple1import androidx.lifec…

如何查看网站开发源码宁波seo软件

$ clip < ~/.ssh/id_rsa.pubbash: /c/Users/UsersName/.ssh/id_rsa.pub: No such file or directoryStep 1、检查本机现有的SSH密钥检查~/.ssh看看是否有名为d_rsa.pub和id_dsa.pub的2个文件。如果你什么都没得到这些文件&#xff0c;转到 步骤2 ;否则&#xff0c;请跳到 …

进一步加强区门户网站建设管理办法网站建设 套餐

Google Breakpad是什么&#xff1f; 一个开源的多平台崩溃报告系统。 Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块&#xff0c;它支持Windows&#xff0c;Linux和Mac和Solaris。由于他本身跨平台&#xff0c;所以很大程度上减少了我们在平台移植时的工作&#…

网站建设最新资讯上海网络营销上海网络推广

文章目录 由浅入深学习TapableTapable是什么Tapable的Hook分类同步和异步的 使用Sync*同步类型钩子基本使用bailLoopWaterfall Async*异步类型钩子ParallelSeries 由浅入深学习Tapable webpack有两个非常重要的类&#xff1a;Compiler和Compilation。他们通过注入插件的方式&a…

电信100m光纤做网站常州做上市公司律所

ctfshow的杂项签到题&#xff0c;下载压缩包之后里面有图片。 直接将图片用010editor打开&#xff0c;检索ctfshow可以看到答案。

网站主持人制作网站建设策划书总结

工业镜头是图像采集系统的重要光学设备。它的作用是将目标物体的像成在相机的感光面上。 一、工业镜头原理 镜头是对光线进行调制和变换&#xff0c;使目标能够成像到相机的感光芯片上。将不同折射率的硝材加工成高精度的曲面&#xff0c;再把这些曲面进行组合后设计成能够满…

郑州注册网站江东怎样优化seo

南邮杯CTF 文件包含 题目地址&#xff1a;asdf 点击后利用file函数对show.php进行文件利用 使用伪协议php://filter/readconvert.base64-encode/resourceindex.php访问index.php文件 base64解码后得到flag [极客大挑战 2019]Secret File 题目地址&#xff1a;BUUCTF在线评测 …

网站建设 保密wordpress文章权限

nuget 是.Net平台上的包管理器, 对于包的发布(打包 package)和消费(下载依赖管理)都有很好的支持, 本文仅仅关注消费端, nuget项目依赖定义格式 新版 nuget 和VS 2019 都推荐项目依赖采用 PackageReference 格式, 这种格式的依赖声明是放到 .csproj 项目文件中的, 之前是使用…

网站建设登录界面设计步骤百度网站登录入口

前言现在对于Docker容器的隔离性都有所了解了&#xff0c;但对容器IP地址的分配、容器间的访问等还是有点小疑问&#xff0c;如果容器的IP由于新启动导致变动&#xff0c;那又怎么才能保证原有业务不会被影响&#xff0c;这就和网络有挂钩了&#xff0c;接下来就大概说说。正文…

wordpress软件站模板网页设计是做什么

引言 JSON&#xff0c;作为一种轻量级的数据交换格式&#xff0c;因其易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff0c;而被广泛应用于网络通信和配置文件中。在Java中&#xff0c;有两个强大的工具帮助咱们处理JSON数据——Jackson和Gson。这两个库各有千秋…

郑州金水区建设局网站如何打开用wordpress

类型 说明 后缀或前缀 示例 sbyte 有符号 8 位整数 y 86y 0b00000101y byte 无符号 8 位自然数 uy 86uy 0b00000101uy int16 有符号 16 位整数 s 86s uint16 无符号 16 位自然数 us 86us int int32 有符号 32 位整数 l none。 86 86l uint uint32 无符号 32 位自然数 u 或 ul 8…

网站优化是怎么做的网络推广方案下拉管家xiala11

一、需求 在执行 mvn clean package -Dmaven.test.skiptrue 后&#xff0c;生成的 jar 包带有自定义系统时间。 二、实现 方法一&#xff1a;使用自带属性&#xff08;不推荐&#xff09; 使用系统时间戳&#xff0c;但有一个问题&#xff0c;就是默认使用 UTC0 的时区。举例…

网站推广广告包装设计十大网站

前言&#xff1a;MySQL有很多的可视化管理工具&#xff0c;比如“mysql-workbench”和“sequel-pro-”。 现在我写MySQL的终端命令操作的文章&#xff0c;是想强化一下自己对于MySQL的理解&#xff0c;总会比使用图形化的理解透彻&#xff0c;因为我本来就比较喜欢写代码。同时…

德赞网站建设网站制作企业网站的设计公司

文章目录1. 题目2. 解题1. 题目 给定一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除每个等于 nums[i] - 1 或 nums[i] 1 的元素。 开始你拥有…