图像特效——摩尔纹 moir

%%%  Moir
%%%  摩尔纹


clc;
clear all;
close all;

addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm');

I=imread('4.jpg');
I=double(I);
Image=I;
% Image=0.2989 * I(:,:,1) + 0.5870 * I(:,:,2) + 0.1140 * I(:,:,3); 
[row, col]=size(Image);
R=floor(max(row, col)/2);
Image_new=Image;

Degree=20;
Center_X=(col+1)/2;
Center_Y=(row+1)/2;

for i=1:row
    for j=1:col
        x0=j-Center_X;
        y0=Center_Y-i;
        if(x0~=0)
            beta=atan(y0/x0);
            if(x0<0)
                beta=beta+pi;
            end
        else
            beta=pi/2;
        end
        radius=sqrt(x0*x0+y0*y0);
        beta=beta+radius*Degree;
        x=radius*sin(beta);
        y=radius*cos(beta);
% % %         x=x+col/2;
% % %         y=row/2-y;
        if(x>1 && x<col && y<row && y>1)
            x1=floor(x);
            y1=floor(y);
            p=x-x1;
            q=y-y1;
            Image_new(i,j)=(1-p)*(1-q)*Image(y1,x1)+p*(1-q)*Image(y1,x1+1)...
                            +q*(1-p)*Image(y1+1,x1)+p*q*Image(y1+1,x1+1);
        end
    end
end
figure, imshow(Image_new/255);


原图


效果图



【资源说明】 基于python实现手写痕迹文档图像摩尔消除源码+项目运行说明.zip 二、数据分析 **数据划分**:使用1000张做为训练集,81张作为验证集。 官方提供了训练集1081对,测试集A、B各200张。包含以下几个特征: 1.图像分辨率普遍较大 2.手写字包含红黑蓝多种颜色,印刷字基本为黑色 3.手写字除了正常文字外,还包含手画的线段、图案等内容 4.试卷上的污渍、脏点也属于需要去除的内容 5.手写字和印刷字存在重叠 **mask**:根据原始图片和标签图像的差值来生成mask数据 计算RGB通道的平均差值 平均差值在20以上的设为 1 平均差值在20以下的设为 差值/20 三、模型设计 网络模型,是基于开源的EraseNet,然后整体改成了Paddle版本。同时也尝试了最新的PERT:一种基于区域的迭代场景文字擦除网络。基于对比实验,发现ErastNet,在本批次数据集上效果更好。从网络结构图上可以直观的看出ErastNet是多分支以及多阶段网络其中包括mask生成分支和两阶段图像生成分支。此外整个网络也都是基于多尺度结构。在损失函数上,原版的ErastNet使用了感知损失以及GAN损失。两个损失函数,是为了生成更加逼真的背景。但是本赛题任务的背景都是纯白,这两个损失是不需要的,可以直接去除。此外,由于ErastNet网络是由多尺度网络组成,结合去摩尔比赛的经验,我把ErastNet网络的Refinement替换成了去摩尔比赛使用的多尺度网络 双模型融合: 模型一:erasenet去掉判别器部分,仅保留生成器 模型二:erasenet二阶段网络使用基于Non-Local的深度编解码结构 四、训练细节 **训练数据:** 增强仅使用横向翻转和小角度旋转,保留文字的先验 随机crop成512x512的patch进行训练 **训练分为两阶段:** 第一阶段损失函数为dice_loss + l1 loss 第二阶段损失函数只保留l1 loss ## 五、测试细节 测试trick: **分块测试**,把图像切分为512x512的小块进行预测,保持和训练一致 **交错分块测试**,测试图像增加镜像padding,且分块时边缘包含重复部分,每次预测仅保留每块预测结果的中心部分,这么做的原因是图像边缘信息较少,预测效果要差于中心部分 测试时对**测试**数据使用了横向的镜像**增强** 测试时将两个**模型**的预测结果进行**融合** 七、其他 data:定义数据加载 loss:定义损失函数 model:定义网络模型 compute_mask.py:生成mask文件 test.py: 测试脚本 train.py: 训练脚本 代码运行: 1.指定数据文件夹 2.运行sh train.sh 生成mask并开始训练 3.指定测试文件夹和模型路径,执行sh test.sh开始测试 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
傅里叶变换是一种数学工具,常用于信号处理领域,特别是在图像处理中,它能将空间域的信息转换到频域分析。摩尔Moiré pattern),通常出现在摄影或光学显微镜下,是由两个相似但不完全相同的图案叠加导致的干涉效应。 在MATLAB中,可以使用`fft()`函数对图像进行快速傅立叶变换(FFT),然后通过改变频率域的数据来去除摩尔。一般步骤包括: 1. 加载或创建图像数据。 ```matlab img = imread('moire_image.jpg'); % 替换为你实际的图片文件名 ``` 2. 对图像进行二维傅立叶变换。 ```matlab frequencies = fft2(img); ``` 3. 可能需要对频谱进行平滑或者低通滤波,以减少高频噪声并抑制摩尔。这一步可以通过应用高斯滤波或设定特定截止频率来完成。 ```matlab filtered_frequencies = fspecial('gaussian', [size(frequencies, 1), size(frequencies, 2)], sigma); % sigma设置合适的宽度 filtered_frequencies = filtered_frequencies .* frequencies; ``` 4. 对滤波后的频谱取逆傅立叶变换(IFFT),得到去噪后的图像。 ```matlab restored_img = ifft2(filtered_frequencies); ``` 5. 最后,可能是实数部分,所以需要使用`abs()`或`real()`函数获取结果,并根据需要调整图像大小和归一化。 ```matlab restored_img = abs(restored_img); restored_img = imresize(restored_img, original_size); % replace 'original_size' with your desired dimensions ``` 请注意,傅里叶变换不一定总能完美消除摩尔,因为它依赖于频率响应特性,对于某些特定的图案组合,可能会有残余效果。因此,在实践中可能需要结合其他技术或针对具体情况选择合适的方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值