零、前言
本篇文章主要教大家如何编写简单的Matlab程序,以及对于并行计算实验一如何完成,给大家一个参考实验报告。
喜欢的小伙伴们可以点个赞,关注个嘛!这是对作者最好的激励。以防找不到本文,和本文的后续,可以直接收藏本文。若有错漏之处还望大佬们不吝赐教!
一、实验目的
初步学习matlab的基本编程方法,以及用matlab来解决一些实际的数值算法。
二、实验内容1
(一)要求:
1. 查找“同态滤波”的基本原理;
2. 自行找一张图片;
3. 用matlab对上面的图片进行同态滤波;
4. 总结与体会。
(二)具体完成情况:
1. “同态滤波”的基本原理
同态变换一般是指将非线性组合信号通过某种变换,使其变成线性组合信号,从而可以更方便的运用线性操作对信号进行处理。
2. 原始图片为
3. 用matlab对上面的图片进行同态滤波
(1)代码
% 参数初始化
high_cutoff = 1; % 高频截止频率
low_cutoff = 0.1; % 低频截止频率
cutoff_diff = 0.2; % 截止频率范围
D0 = 0.2; % 高斯函数带宽
% 读取输入图像
input_image = imread('Oppenheimer.jpg');
[rows, cols] = size(input_image);
% 对输入图像取对数
log_transformed_img = log(double(input_image) + 1);
% 中心化操作,根据奇偶位置赋予正负号
centered_img = zeros(rows, cols);
for i = 1:rows
for j = 1:cols
if mod(i+j, 2) == 0
centered_img(i, j) = log_transformed_img(i, j);
else
centered_img(i, j) = -1 * log_transformed_img(i, j);
end
end
end
% 对中心化后的图像进行二维傅里叶变换
fft_centered_img = fft2(centered_img);
% 同态滤波器设计
homomorphic_filter = zeros(rows, cols);
D = D0^2;
mid_row = floor(rows/2); % 图像中心点的行坐标
mid_col = floor(cols/2); % 图像中心点的列坐标
for i = 1:rows
for j = 1:cols
distance = ((i-mid_row)^2 + (j-mid_col)^2);
homomorphic_filter(i, j) = cutoff_diff * (1 - exp((-cutoff_diff)*(distance/D))) + low_cutoff;
end
end
% 应用同态滤波器
filtered_fft_img = fft_centered_img .* homomorphic_filter;
% 反变换并取实部,再取绝对值
filtered_img = abs(real(ifft2(filtered_fft_img)));
% 指数化还原
restored_img = exp(filtered_img) - 1;
% 灰度级归一化处理
max_val = max(restored_img(:));
min_val = min(restored_img(:));
value_range = max_val - min_val;
normalized_img = zeros(rows, cols, 'uint8');
for i = 1:rows
for j = 1:cols
normalized_img(i, j) = uint8(255 * (restored_img(i, j) - min_val) / value_range);
end
end
%显示原图像
%imshow(input_image);
% 显示处理后的图像
imshow(normalized_img);
%subplot(1,2,1), imshow(input_image), title('原图像');
%subplot(1,2,2), imshow(normalized_img), title('变换后的图像');
(2)处理后![](https://i-blog.csdnimg.cn/blog_migrate/7ac0b0bbd93db1f770d68e396c30fc56.png)
(关于这个处理结果为什么是三个图像,如何改为一个图像,请看参考文章3)
三、实验内容2
(一)要求:
1. 请用matlab求y的导数:
代码为:
%设置变量
syms x
%原函数求导
diff(sqrt(x) + 5 * cos(x) - log10(2))
结果为:ans =1/(2*x^(1/2)) - 5*sin(x)
2. 设参数方程
确定了函数
,用matlab代码,求
。
代码为:
%设置变量
syms t
%原函数
x = t^2-1
y = t - t^3
%对表达式求值
diff(y)/diff(x)
结果为:ans =-(3*t^2 - 1)/(2*t)
3. 已知函数
、
,请利用MATLAB求复合函数的偏导数,并验证
.
代码为:
%设置变量
syms x y u
%原函数
z = log10(u)
u = sqrt(x^2 + y^2)
%对表达式求值
s = diff(z,x,2)
t = diff(z,y,2)
s+t
结果为:ans=0,验证成功。
四、参考文章
MATLAB函数的求导(一阶、高阶、参数方程求导实例)_matlab求曲线一阶导-CSDN博客
MATLAB图像处理--同态滤波(代码及示例)_同态滤波matlab代码-CSDN博客
MatLab:彩色图像RGB三通道的分离与合并_基于matlab的图像rgb色彩合成与分-CSDN博客
五、感谢
首先感谢网上关于这方面的资料很多,谢谢其他作者大大的文章对我提供的帮助!
感谢各位观众老爷们能够看到这里。喜欢的话不妨点赞关注一下我!!