判断一个函数里对参数的修改是否对外部产生影响

 对于普通的swap(int a,int b)肯定不会对外界产生影响的

对于传引用swap(int &a,int &b)对a,b的修改肯定会对外界产生影响

现在主要说一下参数为指针 swap(int *a, int *b)或者更复杂的void func(int ***a,int ***b):

判断的依据就是如果a为左值的情况下,如果前面有 * ,则修改外界产生影响,否则没有

*a=5;有

a=0x12345678;没有

和一个同学聊天时谈到的,感觉挺有用的~

以下是修改后的代码,不需要引入外部函数: ```matlab % 读取图像 img = imread('input.jpg'); % 对图像进行缺失处理 mask = rand(size(img)) > 0.5; % 随机生成缺失掩模 img_masked = img .* uint8(mask); % 将掩模应用到原图像上 % 使用加速近邻梯度算法进行图像补全 lambda = 1 / sqrt(max(size(img_masked))); % 正则化参数 max_iter = 200; % 最大迭代次数 epsilon = 1e-5; % 迭代终止条件 L = zeros(size(img_masked)); % 初始化低秩矩阵 S = zeros(size(img_masked)); % 初始化稀疏矩阵 Y = zeros(size(img_masked)); % 初始化拉格朗日乘子矩阵 for i = 1:max_iter % 迭代求解 % 更新低秩矩阵和稀疏矩阵 [L, S] = proximal_operator(img_masked - S - (1/lambda) * Y, 1/lambda); % 更新拉格朗日乘子矩阵 Y = Y + lambda * (img_masked - L - S); % 判断是否满足迭代终止条件 if norm(img_masked - L - S, 'fro') / norm(img_masked, 'fro') < epsilon break; end end img_reconstructed = uint8(L + S); % 重构图像 % 显示结果 figure; subplot(1, 2, 1); imshow(img_masked); title('缺失图像'); subplot(1, 2, 2); imshow(img_reconstructed); title('补全后图像'); ``` 此代码也是首先读取输入图像,然后生成一个随机的缺失掩模,并将其应用到原图像上,得到缺失的图像。接着,使用加速近邻梯度算法进行处理,得到重构图像。与外部函数不同的是,该算法的实现是通过直接编写代码实现的,而不需要引入外部函数。 具体来说,该算法通过迭代的方式求解低秩矩阵和稀疏矩阵,而拉格朗日乘子矩阵则用于更新低秩矩阵和稀疏矩阵。在实现过程中,需要先定义一个名为 `proximal_operator` 的子函数,用于实现低秩矩阵和稀疏矩阵的更新。在主函数中,需要设定正则化参数、最大迭代次数和迭代终止条件等参数,并对低秩矩阵和稀疏矩阵进行初始化。然后,通过迭代的方式求解低秩矩阵和稀疏矩阵,并更新拉格朗日乘子矩阵,直到满足迭代终止条件。最后,将重构后的图像显示出来。 需要注意的是,该算法的参数选择和迭代次数等对于补全效果有较大的影响,需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值