#include "mex.h"
#include "matrix.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
const int *vettore_im,*vettore_se;
int imx,imy,sex,sey;
int px,dx,py,dy,tempx,tempy,cx,cy;
unsigned char *temp8,*temp_out8,*in_scan8,*out_scan8,*out8,*im8;
unsigned short *temp16,*temp_out16,*in_scan16,*out_scan16,*out16,*im16;
unsigned long *temp32,*temp_out32,*in_scan32,*out_scan32,*out32,*im32;
double *tempd,*temp_outd,*in_scand,*out_scand,*outd,*imd;
unsigned char *se;
int ii,jj,n,m;
int distx,disty;
double infinito;
/************************* uint8 ********/
if (mxIsUint8(prhs[0]))
{
im8=mxGetData(prhs[0]);
vettore_im=mxGetDimensions(prhs[0]);
imx=vettore_im[0];
imy=vettore_im[1];
se=mxGetData(prhs[1]);
vettore_se=mxGetDimensions(prhs[1]);
sex=vettore_se[0];
sey=vettore_se[1];
cx=((sex+1)-(sex+1)%2)/2;
cy=((sey+1)-(sey+1)%2)/2;
px=cx-1;
dx=sex-cx;
py=cy-1;
dy=sey-cy;
tempx=px+imx+dx;
tempy=py+imy+dy;
temp8=mxCalloc(tempx*tempy,sizeof(unsigned char));
temp_out8=mxCalloc(tempx*tempy,sizeof(unsigned char));
for (jj=0;jj<tempy;jj++)
{ out_scan8=temp8+tempx*jj;
for (ii=0;ii<tempx;ii++)
{*out_scan8=0xFF;
out_scan8++;
}
}
for (jj=0;jj<imy;jj++)
{in_scan8=im8+imx*jj;
out_scan8=temp8+tempx*(jj+py)+px;
out8=temp_out8+tempx*(jj+py)+px;
for (ii=0;ii<imx;ii++)
{*out_scan8=*in_scan8;
*out8=0xFF;
out_scan8++;
in_scan8++;
out8++;
}
}
for (m=1;m<sey+1;m++)
{for (n=1;n<sex+1;n++)
{if (*(se+(m-1)*sex+n-1)!=0)
{distx=n-cx;
disty=m-cy;
for (jj=py;jj<py+imy;jj++)
{in_scan8=temp8+tempx*(jj+disty)+px+distx;
out_scan8=temp_out8+tempx*jj+px;
for (ii=0;ii<imx;ii++)
{if (*(out_scan8)>*(in_scan8))
*out_scan8=*in_scan8;
out_scan8++;
in_scan8++;
}
}
}
}
}
plhs[0] = mxCreateNumericArray(2,vettore_im,mxUINT8_CLASS,mxREAL);
out8=mxGetData(plhs[0]);
for (jj=0;jj<imy;jj++)
{ in_scan8=temp_out8+tempx*(jj+py)+px;
out_scan8=out8+imx*jj;
for (ii=0;ii<imx;ii++)
{*out_scan8=*in_scan8;
out_scan8++;
in_scan8++;
}
}
mxFree(temp8);
mxFree(temp_out8);
return;
}
/************************* uint16 *******/
if (mxIsUint16(prhs[0]))
{
im16=mxGetData(prhs[0]);
vettore_im=mxGetDimensions(prhs[0]);
imx=vettore_im[0];
imy=vettore_im[1];
se=mxGetData(prhs[1]);
vettore_se=mxGetDimensions(prhs[1]);
sex=vettore_se[0];
sey=vettore_se[1];
cx=((sex+1)-(sex+1)%2)/2;
cy=((sey+1)-(sey+1)%2)/2;
px=cx-1;
dx=sex-cx;
py=cy-1;
dy=sey-cy;
tempx=px+imx+dx;
tempy=py+imy+dy;
temp16=mxCalloc(tempx*tempy,sizeof(unsigned short));
temp_out16=mxCalloc(tempx*tempy,sizeof(unsigned short));
for (jj=0;jj<tempy;jj++)
{ out_scan16=temp16+tempx*jj;
for (ii=0;ii<tempx;ii++)
{*out_scan16=0xFFFF;
out_scan16++;
}
}
for (jj=0;jj<imy;jj++)
{in_scan16=im16+imx*jj;
out_scan16=temp16+tempx*(jj+py)+px;
out16=temp_out16+tempx*(jj+py)+px;
for (ii=0;ii<imx;ii++)
{*out_scan16=*in_scan16;
*out16=0xFFFF;
out_scan16++;
in_scan16++;
out16++;
}
}
for (m=1;m<sey+1;m++)
{for (n=1;n<sex+1;n++)
{if (*(se+(m-1)*sex+n-1)!=0)
{distx=n-cx;
disty=m-cy;
for (jj=py;jj<py+imy;jj++)
{in_scan16=temp16+tempx*(jj+disty)+px+distx;
out_scan16=temp_out16+tempx*jj+px;
for (ii=0;ii<imx;ii++)
{if (*(out_scan16)>*(in_scan16))
*out_scan16=*in_scan16;
out_scan16++;
in_scan16++;
}
}
}
}
}
plhs[0] = mxCreateNumericArray(2,vettore_im,mxUINT16_CLASS,mxREAL);
out16=mxGetData(plhs[0]);
for (jj=0;jj<imy;jj++)
{ in_scan16=temp_out16+tempx*(jj+py)+px;
out_scan16=out16+imx*jj;
for (ii=0;ii<imx;ii++)
{*out_scan16=*in_scan16;
out_scan16++;
in_scan16++;
}
}
mxFree(temp16);
mxFree(temp_out16);
return;
}
/************************* uint32 *******/
if (mxIsUint32(prhs[0]))
{
im32=mxGetData(prhs[0]);
vettore_im=mxGetDimensions(prhs[0]);
imx=vettore_im[0];
imy=vettore_im[1];
se=mxGetData(prhs[1]);
vettore_se=mxGetDimensions(prhs[1]);
sex=vettore_se[0];
sey=vettore_se[1];
cx=((sex+1)-(sex+1)%2)/2;
cy=((sey+1)-(sey+1)%2)/2;
px=cx-1;
dx=sex-cx;
py=cy-1;
dy=sey-cy;
tempx=px+imx+dx;
tempy=py+imy+dy;
temp32=mxCalloc(tempx*tempy,sizeof(unsigned long));
temp_out32=mxCalloc(tempx*tempy,sizeof(unsigned long));
for (jj=0;jj<tempy;jj++)
{ out_scan32=temp32+tempx*jj;
for (ii=0;ii<tempx;ii++)
{*out_scan32=0xFFFFFFFF;
out_scan32++;
}
}
for (jj=0;jj<imy;jj++)
{in_scan32=im32+imx*jj;
out_scan32=temp32+tempx*(jj+py)+px;
out32=temp_out32+tempx*(jj+py)+px;
for (ii=0;ii<imx;ii++)
{*out_scan32=*in_scan32;
*out32=0xFFFFFFFF;
out_scan32++;
in_scan32++;
out32++;
}
}
for (m=1;m<sey+1;m++)
{for (n=1;n<sex+1;n++)
{if (*(se+(m-1)*sex+n-1)!=0)
{distx=n-cx;
disty=m-cy;
for (jj=py;jj<py+imy;jj++)
{in_scan32=temp32+tempx*(jj+disty)+px+distx;
out_scan32=temp_out32+tempx*jj+px;
for (ii=0;ii<imx;ii++)
{if (*(out_scan32)>*(in_scan32))
*out_scan32=*in_scan32;
out_scan32++;
in_scan32++;
}
}
}
}
}
plhs[0] = mxCreateNumericArray(2,vettore_im,mxUINT32_CLASS,mxREAL);
out32=mxGetData(plhs[0]);
for (jj=0;jj<imy;jj++)
{ in_scan32=temp_out32+tempx*(jj+py)+px;
out_scan32=out32+imx*jj;
for (ii=0;ii<imx;ii++)
{*out_scan32=*in_scan32;
out_scan32++;
in_scan32++;
}
}
mxFree(temp32);
mxFree(temp_out32);
return;
}
/************************* double *******/
if (mxIsDouble(prhs[0]))
{
infinito=mxGetInf();
imd=mxGetPr(prhs[0]);
vettore_im=mxGetDimensions(prhs[0]);
imx=vettore_im[0];
imy=vettore_im[1];
se=mxGetData(prhs[1]);
vettore_se=mxGetDimensions(prhs[1]);
sex=vettore_se[0];
sey=vettore_se[1];
cx=((sex+1)-(sex+1)%2)/2;
cy=((sey+1)-(sey+1)%2)/2;
px=cx-1;
dx=sex-cx;
py=cy-1;
dy=sey-cy;
tempx=px+imx+dx;
tempy=py+imy+dy;
tempd=mxCalloc(tempx*tempy,sizeof(double));
temp_outd=mxCalloc(tempx*tempy,sizeof(double));
for (jj=0;jj<tempy;jj++)
{ out_scand=tempd+tempx*jj;
for (ii=0;ii<tempx;ii++)
{*out_scand=infinito;
out_scand++;
}
}
for (jj=0;jj<imy;jj++)
{in_scand=imd+imx*jj;
out_scand=tempd+tempx*(jj+py)+px;
outd=temp_outd+tempx*(jj+py)+px;
for (ii=0;ii<imx;ii++)
{*out_scand=*in_scand;
*outd=infinito;
out_scand++;
in_scand++;
outd++;
}
}
for (m=1;m<sey+1;m++)
{for (n=1;n<sex+1;n++)
{if (*(se+(m-1)*sex+n-1)!=0)
{distx=n-cx;
disty=m-cy;
for (jj=py;jj<py+imy;jj++)
{in_scand=tempd+tempx*(jj+disty)+px+distx;
out_scand=temp_outd+tempx*jj+px;
for (ii=0;ii<imx;ii++)
{if (*(out_scand)>*(in_scand))
*out_scand=*in_scand;
out_scand++;
in_scand++;
}
}
}
}
}
plhs[0] = mxCreateDoubleMatrix(imx,imy,mxREAL);
outd=mxGetPr(plhs[0]);
for (jj=0;jj<imy;jj++)
{ in_scand=temp_outd+tempx*(jj+py)+px;
out_scand=outd+imx*jj;
for (ii=0;ii<imx;ii++)
{*out_scand=*in_scand;
out_scand++;
in_scand++;
}
grayscaleops_m.zip_腐蚀算法_膨胀、腐蚀_膨胀算法
版权申诉
18 浏览量
2022-07-13
19:24:15
上传
评论
收藏 4KB ZIP 举报
weixin_42651887
- 粉丝: 75
- 资源: 1万+
最新资源
- HCIP-Datacom笔记 (1).pdf
- yolov5,SSD 可能使用到的一些代码
- bbbbbbbbbbbbbbbbbb
- 安卓逆向学习笔记之Frida Stalker 还原OLLVM AES.docx
- 安卓逆向学习笔记之unicorn来trace还原OLLVM Base64.docx
- 最新版本私钥助记词碰撞器大富豪使用python进行制作通过接口的方式进行验证支持多币种多链多网络一分钟万次验证高出货率
- 介绍离散性制造行业的MES系统流程
- Arduino IDE压缩包版本,2024年4月26日,最新版本
- 基于IDEA-CCNL/Randeng-Pegasus-238M-Summary-Chines微调的中文文本摘要任务源码+数据集
- 自动驾驶-状态估计和定位之直方图滤波(Histogram+Filter)定位应用和源码.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈