2.图像作为函数 | 标量、函数、混合图像_6

目录

标量

手写函数

混合图片


标量

在前面的例子中,我们看到了如何通过数字划分图像。

>> dolhphin = imread('dolphin.png');

>> dolhphin / 2

除以2与乘以0.5相同。

>> dolphin * 0.5

写这两个的顺序也无关紧要。

>> 0.5 * dolphin

常数0.5称为标量,这可能是因为它缩放了图像的值。

让我们看看与原始图像相比结果如何:

将强度值减半,明显变暗。

请注意,我们可以乘以任意数字,甚至大于1。

将强度值乘以1.5可使图像更亮:

>> result = dolphin * 1.5;
>> imshow(resule);

运行结果:

我们在某些地方看到同样的褪色效果。这是由于高于255的图像值在该限制下被截断。

手写函数

在Octave中,我们可以编写一个函数来执行常见操作。

让我们把缩放变成一个函数。

>> function result = scale(img, value)
      result = value .* img;
   endfunction

我们通过输入单词function来编写函数,后面跟着返回值的变量名。

然后是等号,函数的名称和括号中的参数。

接下来是函数体。在这种情况下,我们希望结果是值和图像的乘积。

为了确保我们正在执行逐元素的乘法,让我们将" * "改为" .* "。

当其中一个值是标量时,这没有任何区别,但是当两个被乘的量是向量或矩阵时," * "和" .* "会产生不同的结果。

我们通过输入endfunction来结束这个功能。

让我们加载一个图像并尝试这个功能。

>> function result = scale(img, value);
      value .* img;
   endfunction
>>
>> dolphin = imread('dolphin.png');
>> dolphin_sc = scale(dolphin, 0.5);
>> imshow(dolphin);
>> imshow(dolphin_sc);

混合图片

在一起,并通过缩放器乘以图像强度值,让我们重新审视我们平均两个图像的例子。

我们看到除以2的除法可以重写为乘以0.5。

>> dolphin = imread('dolpthin.png');
>> bicycle = imread('bicycle.png');
>>
>> result = dolphin / 2 + bicycle / 2;
>> result = 0.5 * dolphin + 0.5 * bicycle;

现在,这导致图像具有相等的部分海豚和等量的自行车。

如果我们想改变这些比率怎么办?我们想要更多的海豚。

>> result = 0.75 * dolphin + 0.5 * bicycle;

强度值与原始图像相同,我们应该确保这些权重之和为1。通常,这被称为混合两个图像。

>> result = 0.75 * dolphin + 0.25 * bicycle;

让我们看看它的样子。

是的,我们确实从海豚图像中看到了更多的冲浪,但这有点难以辨别。

我们换一种稍微远一点的方式怎么样?

>> result = 0.85 * dolphin + 0.15 * bicycle;

更多海豚了。

我希望我们有一个函数来做这个,我们可以这样调用它。

你能帮我写这个功能吗?我来帮你。将代码放在函数体中。请记住,要返回一些内容,请将其分配给输出变量。

另请注意,a和b是要混合的两个图像,alpha是要应用于a的权重。

实现该功能后,使用不同的alpha值进行测试。

我们知道我们想要将A乘以α,并且由于一些权重需要为1,我们将B乘以α减去α。

>> funciton output = blend(a, b, alpha)
      alpha * a + (1 - alpha) * b
   endfunction
>>
>> dolphin = imread('dolphin.png');
>> bicycle = imread('bicycle.png');
>>
>> result = blend(dolphin, bicycle, 0.85);
>> imshow(result);

最后我们将它分配给输出变量,就这样,让我们看看我们得到了什么。

好的,和以前一样,现在看看改变混合权重是多么容易。

例如,我想要更少的海豚和更多的自行车。

>> result = blend(dolphin, bicycle, 0.25);

>> imshow(result);

好了。几乎看起来街上有水。

这种获取两个图像加权和的方法是alpha混合的基础。


——学会编写自己的代码,才能练出真功夫。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值