2 Star 0 Fork 0

ping_ch/disp_fftw

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
func_screen.c 3.58 KB
一键复制 编辑 原始数据 按行查看 历史
ping2ch 提交于 2013-05-24 03:01 . version 0.1
#include <math.h>
#include "func_math.h"
/*圆孔屏,temp初始图片,Im_W图片宽,Im_H图片高,R孔半径
* o_x孔相对中心水平位移,o_y孔相对中心垂直位移
* fac_hol_rel孔实部透过系数,fac_hol_img孔虚部透过系数
* fac_scrn_rel屏实部透过系数,fac_scrn_img屏虚部透过系数
*/
void screen_circ(double *temp,int Im_W,int Im_H,int R,int o_x,int o_y,double fac_hol_rel,double fac_hol_img,double fac_scrn_rel,double fac_scrn_img)
{
int i,j;
for(i=0 ; i<Im_H ; i++)
{
for(j=0 ; j<Im_W ; j++)
{
if((sqrt((i-(Im_H/2.0-o_y))*(i-(Im_H/2.0-o_y))+(j-(Im_W/2.0-o_x))*(j-(Im_W/2.0-o_x)))) <= R-1)
{
(*(temp+i*Im_W*2+j*2+0)) *= fac_hol_rel;
(*(temp+i*Im_W*2+j*2+1)) *= fac_hol_img;
}
else
{
(*(temp+i*Im_W*2+j*2+0)) *= fac_scrn_rel;
(*(temp+i*Im_W*2+j*2+1)) *= fac_scrn_img;
}
}
}
}
/*矩孔屏,temp初始图片,Im_W图片宽,Im_H图片高,hol_w孔宽,hol_h孔高
* o_x孔相对中心水平位移,o_y孔相对中心垂直位移
* fac_hol_rel孔实部透过系数,fac_hol_img孔虚部透过系数
* fac_scrn_rel屏实部透过系数,fac_scrn_img屏虚部透过系数
*/
void screen_rec(double *temp,int Im_W,int Im_H,int hol_w,int hol_h,int o_x,int o_y,double fac_hol_rel,double fac_hol_img,double fac_scrn_rel,double fac_scrn_img)
{
int i,j;
for(i=0 ; i<Im_H ; i++){
for(j=0 ; j<Im_W ; j++)
{
if(i>=(Im_H/2-o_y)-hol_h/2+1 && i<(Im_H/2-o_y)+hol_h/2 && j>=(Im_W/2-o_x)-hol_w/2+1 && j<(Im_W/2-o_x)+hol_w/2)
{
(*(temp+i*Im_W*2+j*2+0)) *= fac_hol_rel;
(*(temp+i*Im_W*2+j*2+1)) *= fac_hol_img;
}
else
{
(*(temp+i*Im_W*2+j*2+0)) *= fac_scrn_rel;
(*(temp+i*Im_W*2+j*2+1)) *= fac_scrn_img;
}
}
}
}
/*平面透过屏,temp初始图片,Im_W图片宽,Im_H图片高
* fac_rel实部透过系数,fac_img虚部透过系数
*/
void screen_plate(double *temp,int Im_W,int Im_H,double fac_rel,double fac_img)
{
int i,j;
for(i=0 ; i<Im_H ; i++);
{
for(j=0 ; j<Im_W ; j++)
{
(*(temp+i*Im_W*2+j*2+0)) *= fac_rel;
(*(temp+i*Im_W*2+j*2+1)) *= fac_img;
}
}
}
/*函数透过率屏:给出实部与虚部的二元函数(无参),对矩阵元实行变换
* f_rel实部变换函数指针,f_img虚部变换函数指针
* 以图片左下角为原点
*/
void screen_func2(double *temp,int Im_W,int Im_H,double (*f_rel)(double x , double y),double (*f_img)(double x,double y))
{
int i,j;
for(i=0 ; i<Im_H ; i++)
{
for(j=0 ; j<Im_W ; j++)
{
(*(temp+i*Im_W*2+j*2+0)) *= (*f_rel)(j,i);
(*(temp+i*Im_W*2+j*2+1)) *= (*f_img)(j,i);
}
}
}
/*二维三角透过率网屏
* Tx_rel,Ty_rel,Tx_img,Ty_img实虚部三角波周期
* min_rel,max_rel,min_img,max_img实虚部调制上下限
*/
void screen_grid(double *temp,int Im_W,int Im_H,double Tx_rel,double Ty_rel,double min_rel,double max_rel,
double Tx_img,double Ty_img,double min_img,double max_img)
{
int i,j;
for(i=0 ; i<Im_H ; i++)
{
for(j=0 ; j<Im_W ; j++)
{
(*(temp+i*Im_W*2+j*2+0)) *= triangle_2(j , i , Tx_rel , Ty_rel , min_rel , max_rel);
(*(temp+i*Im_W*2+j*2+1)) *= triangle_2(j , i , Tx_img , Ty_img , min_img , max_img);
}
}
}
//半色调屏(模低于阀值的矩阵元置零
void screen_half(double *temp,int Im_W,int Im_H,double limit)
{
int i,j;
for(i=0 ; i<Im_H ; i++)
{
for(j=0 ; j<Im_W ; j++)
{
if(sqrt((*(temp+i*Im_W*2+j*2+0))*(*(temp+i*Im_W*2+j*2+0))+(*(temp+i*Im_W*2+j*2+1))*(*(temp+i*Im_W*2+j*2+1))) < limit)
(*(temp+i*Im_W*2+j*2+0))=(*(temp+i*Im_W*2+j*2+1))=0.0;
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/chen200910a/disp_fftw.git
git@gitee.com:chen200910a/disp_fftw.git
chen200910a
disp_fftw
disp_fftw
master

搜索帮助