当前位置: 首页 > news >正文

网站目录网站建设服务器如何选择

网站目录,网站建设服务器如何选择,网上做网站兼职,.net可以做网站做游戏 博客园ISP——LSC(Lens Shading Correction) 现象 如图所示就是拍摄纯灰色卡#xff08;正常所有像素值一样#xff09;时shading的具体现象#xff0c;上侧称为Luma shading,下侧称为color shading#xff0c;相比较而言就是color shading除了亮度上有影响#xff0c;还会影响…ISP——LSC(Lens Shading Correction) 现象 如图所示就是拍摄纯灰色卡正常所有像素值一样时shading的具体现象上侧称为Luma shading,下侧称为color shading相比较而言就是color shading除了亮度上有影响还会影响颜色不一致。 原因分析 Luma shading原因 引起Luma shading的主要原因时镜头的光学特性决定的本专栏主要讲解ISP所以这一块只能用通俗的方式解释可能不太准确。上图是百度下载的这幅图能比较直观地感受shading的原因如有侵权还望告知。 Luma shading的主要原因是镜头中心到边缘的能量衰减导致的如图所示蓝色和绿色用相同的数量线条表示能量中心位置的蓝色几乎所有能量都能达到最右侧的的成像单元但是边缘的绿色由于有一定角度射入经过镜头的折射有一部分光最上方的几条绿色线条就没法达到成像单元因此成像单元中心的能量就会比边缘的大变现在亮度上就是亮度向边缘衰减变暗。通常镜头的衰减符合 f ( θ ) c o s 4 ( θ ) f(\theta) cos^{4}(\theta) f(θ)cos4(θ) 式中θ表示的是入射光线和法线的夹角。 Color shading原因 如图所示镜头带来的color shading主要是因为不同颜色的光的折射率不同导致白光经过镜头后达到成像面时不同颜色的光的位置不同导致偏色。当然偏色还会和CRA有关但是一般镜头选型的时候都会注意和sensor的CRA进行匹配一般两者不会相差太大所以CRA导致的偏色不做重点讨论。 矫正方法 LSC的本值就是能量有衰减反过来为了矫正就用该点的像素值乘以一个gain值让其恢复到衰减前的状态所以矫正的本质就是找到这个gain值。 从目前的矫正方法来看个人觉得可以分成三大类 储存增益法多项式拟合法自动矫正法 目前方法1和方法2是使用最多的而且方法3我还没碰到过只是见网上提到了就提一下如果有谁有相关资料可以分享一下大家学习学习所以本文主要以方法1和方法2进行讨论。 储存增益法 radial shading correct 上面有提到衰减符合cos(θ)的四次方规律而θ在三维空间对各个方向是一致的所以各个方向的衰减如下图 图中相同颜色可以理解成亮度是一样的也就是图中红色一圈圈的像素需要的增益是一样的所以就可以用半径为变量来求出不同半径像素需要的增益。然后把半径对应的增益值储存在内存中到了要用的时候再拿出来用从而完成矫正。但是不可能把所有像素的半径都存储起来所以就通过采样的方式提取特征半径的增益存储到内存然后其他半径对应的增益在矫正的时候通过插值算法求出来。这种方式对内存的硬件要求就低了。这就是radial shading correct。 mesh shading correct 和半径不同这种方式是把整幅图像分成n*n个网格然后针对网格顶点求出矫正的增益然后把这些顶点的增益储存到内存中同理其他的点的增益也是通过插值的方式求出。 如图是上图分成网格后每个网格亮度的分布可以看出和cos(θ)的四次方很接近然后针对这样的网格亮度求出增益如下图刚好和亮度分布相反 多项式拟合 多项式拟合的方式就是用半径为采样点然后把这些采样点通过高次拟合的方式拟合成一个高次曲线然后把高次曲线的参数储存起来用的时候把半径带入公式就能求出对应的gain值用于矫正。 这篇论文中采用拉格朗日插值法进行插值具体公式如下图 其他通道也能这么拟合出曲线从而完成各个通道的矫正。 针对光学中心可能不是图像中心的问题有的论文就提出先在图像中找出光学中心然后以光学中心为真实中心完成标定最后也是通过光学中心来求半径带入公式求gain值。 具体实现 标定代码如下 %% -------------------------------- %% author:wtzhu %% date: 20210712 %% fuction: main file of MeshCali3Channel %% -------------------------------- clc;clear;close all;% --------parameters of calibretion------------ filePath images/lsc.bmp; side_num 16; meshON 1; % ---------------------------------------------image imread(filePath); [height, width, channel] size(image); side_y floor(height/side_num); side_x floor(width/side_num); h imshow(image); if meshONfor i 1:side_num-1line([i*side_x, i*side_x], [1, height], color, r);line([1, width], [i*side_y, i*side_y], color, r);end end title(refImg);image_r image(:,:,1); image_g image(:,:,2); image_b image(:,:,3);%% compress resolution image_point_r zeros(side_num1,side_num1); image_point_g zeros(side_num1,side_num1); image_point_b zeros(side_num1,side_num1); for i 0:side_numfor j 0:side_numx_clip floor([j*side_x - side_x/2, j*side_x side_x/2]);y_clip floor([i*side_y - side_y/2, i*side_y side_y/2]);% make sure that the last point on the edgeif(iside_num y_clip(2) ~ height) y_clip(2) height;endif(jside_num x_clip(2) ~ width) x_clip(2) width;endx_clip(x_clip1) 1;x_clip(x_clipwidth) width;y_clip(y_clip1) 1;y_clip(y_clipheight) height;data_r image_r(y_clip(1):y_clip(2), x_clip(1):x_clip(2));image_point_r(i1,j1) mean(mean(data_r));data_g image_g(y_clip(1):y_clip(2), x_clip(1):x_clip(2));image_point_g(i1,j1) mean(mean(data_g));data_b image_b(y_clip(1):y_clip(2), x_clip(1):x_clip(2));image_point_b(i1,j1) mean(mean(data_b));end endrGain zeros(side_num1,side_num1); gGain zeros(side_num1,side_num1); bGain zeros(side_num1,side_num1);%% caculate lsc luma gain for i 1:side_num1for j 1:side_num1rGain(i,j) image_point_r(uint8(side_num/2) 1, uint8(side_num/2) 1) / image_point_r(i,j);gGain(i,j) image_point_g(uint8(side_num/2) 1, uint8(side_num/2) 1) / image_point_g(i,j);bGain(i,j) image_point_b(uint8(side_num/2) 1, uint8(side_num/2) 1) / image_point_b(i,j);end end save(./src/data/rGain.mat, rGain); save(./src/data/gGain.mat, gGain); save(./src/data/bGain.mat, bGain);矫正代码通过双线性插值法插值 %% -------------------------------- %% author:wtzhu %% date: 20210712 %% fuction: main file of Mesh3Correct %% -------------------------------- clc, clear, close all; % --------parameters of correction------------ filePath images/lsc.bmp; side_num 16; % --------------------------------------------% --------load data--------------------------- % load org image image imread(filePath); [height, width, channel] size(image); sideX floor(height/side_num); sideY floor(width/side_num);image_r image(:,:,1); image_g image(:,:,2); image_b image(:,:,3);% load gain of each channel load(./src/data/rGain.mat); load(./src/data/gGain.mat); load(./src/data/bGain.mat); % --------------correction------------------- disImg zeros(size(image)); gainStepX 0; gainStepY 0; for i 1:heightfor j 1:widthgainStepX floor(i / sideX) 1;if gainStepX 16gainStepX 16;endgainStepY floor(j / sideY) 1;if gainStepY 16gainStepY 16;end% get tht gain of the point by interpolation(Bilinear interpolation)% f(x,y) [f(1,0)-f(0,0)]*x[f(0,1)-f(0,0)]*y[f(1,1)f(0,0)-f(1,0)-f(0,1)]*xyf(0,0)rGainTmp (rGain(gainStepX1, gainStepY) - rGain(gainStepX, gainStepY)) * (i - (gainStepX - 1) * sideX)/sideX ...(rGain(gainStepX, gainStepY1) - rGain(gainStepX, gainStepY)) * (j - (gainStepY - 1) * sideY)/sideY ...(rGain(gainStepX1, gainStepY1) rGain(gainStepX, gainStepY) - rGain(gainStepX1, gainStepY)- rGain(gainStepX, gainStepY 1)) *...(i - (gainStepX - 1) * sideX)/sideX * (j - (gainStepY - 1) * sideY)/sideY rGain(gainStepX, gainStepY);gGainTmp (gGain(gainStepX1, gainStepY) - gGain(gainStepX, gainStepY)) * (i - (gainStepX - 1) * sideX)/sideX ...(gGain(gainStepX, gainStepY1) - gGain(gainStepX, gainStepY)) * (j - (gainStepY - 1) * sideY)/sideY ...(gGain(gainStepX1, gainStepY1) gGain(gainStepX, gainStepY) - gGain(gainStepX1, gainStepY)- gGain(gainStepX, gainStepY 1)) *...(i - (gainStepX - 1) * sideX)/sideX * (j - (gainStepY - 1) * sideY)/sideY gGain(gainStepX, gainStepY);bGainTmp (bGain(gainStepX1, gainStepY) - bGain(gainStepX, gainStepY)) * (i - (gainStepX - 1) * sideX)/sideX ...(bGain(gainStepX, gainStepY1) - bGain(gainStepX, gainStepY)) * (j - (gainStepY - 1) * sideY)/sideY ...(bGain(gainStepX1, gainStepY1) bGain(gainStepX, gainStepY) - bGain(gainStepX1, gainStepY)- rGain(gainStepX, gainStepY 1)) *...(i - (gainStepX - 1) * sideX)/sideX * (j - (gainStepY - 1) * sideY)/sideY bGain(gainStepX, gainStepY);disImg(i,j,1) double(image_r(i, j)) * rGainTmp;disImg(i,j,2) double(image_g(i, j)) * gGainTmp;disImg(i,j,3) double(image_b(i, j)) * bGainTmp;end endfigure(); subplot(121);imshow(image);title(org image); subplot(122);imshow(uint8(disImg));title(corrected image);结果 提示 为了方便下载本项目没有更新到github用的gitee可以在ISPAlgorithmStudy: ISP算法学习汇总主要是论文总结 (gitee.com)仓库中获取相关的资料代码等。本期B站有视频同步讲解LSC_哔哩哔哩_bilibili可以关注B站后续会有更多算法的视频讲解同步知乎专栏ISP图像处理 - 知乎 (zhihu.com)也会有算法简介同步
http://www.hkea.cn/news/14389312/

相关文章:

  • 万网主体新增网站备案需要是滴么重庆做网站建设企业
  • 仿做国外产品网站出路淘宝建站服务
  • jquery 个人网站做婚纱影楼网站的价格
  • 无锡公共工程建设中心网站北京做网站建设的公司有哪些
  • 软件技术主要学什么课程公司seo是什么职位
  • 站长工具亚洲中文精品浙江联科网站建设
  • 安顺建设工程造价管理网站上海发布
  • 无锡哪里有做网站的公司网站建设开发哪些开发语言
  • 东莞网站设计如何网站品牌推广策略
  • emlog怎么做视频网站北京建设官方网站
  • 外网平面设计网站单身男女免费观看国语高清
  • 做网站前期费用wordpress简介
  • 深圳建设银行长沙seo研究中心
  • 最新公司名字大全上海网站优化
  • 网站建设与实践模板做网站外包公司有哪些
  • 公司网站备案多少钱物流企业的网站模板免费下载
  • 浙江网站设计公司最新的产品代理有哪些
  • 重庆网站制作托管长沙网站建设索王道下拉
  • 网站建设实践课程报告phpstudy怎么做网站
  • 网站打开显示建设中云和建设局网站
  • 大酒店网站源代码民宅挂在民宿网站上 保洁谁做
  • zenm自己做网站中国建筑股票
  • 网站收录怎么提高电子商务公司简介怎么写
  • 巴彦淖尔市网站建设窝窝在线观看
  • ajax wordpress福州seo网站优化
  • 北京室内设计公司前十名深圳网站seo教程
  • 网站推广对企业的优势平面设计课程简介
  • 网络设计网站多少钱建材在哪里做网站好
  • 照片书那个网站做的好郑州市公司网站开发设计
  • 杭州电商网站建设公司舆情监测平台