西南科技大学《并行计算与程序设计》实验报告1(MATLAB程序设计基础/matlab的基本编程方法)

本文介绍了如何使用Matlab进行基本编程,包括同态滤波实验的详细步骤和图像处理方法,以及一阶和参数方程的导数计算示例。作者提供了Matlab代码和实验报告,以帮助读者入门Matlab技术。
摘要由CSDN通过智能技术生成

零、前言

本篇文章主要教大家如何编写简单的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)处理后

(关于这个处理结果为什么是三个图像,如何改为一个图像,请看参考文章3

三、实验内容2

(一)要求:

1. 请用matlab求y的导数:
y = \sqrt{x} + 5cosx-ln2

代码为:

%设置变量
syms x
%原函数求导
diff(sqrt(x) + 5 * cos(x) - log10(2))

结果为:ans =1/(2*x^(1/2)) - 5*sin(x)

2. 设参数方程

\begin{cases} x=t^2-1\\ y=t+t^3 \end{cases}确定了函数y=y(x),用matlab代码,求\frac{\frac{\mathrm{dy} }{\mathrm{d} x}}{}

代码为:

%设置变量
syms t
%原函数
x = t^2-1
y = t - t^3
%对表达式求值
diff(y)/diff(x)

结果为:ans =-(3*t^2 - 1)/(2*t)

3. 已知函数z=lnuu=\sqrt{x^2+y^2},请利用MATLAB求复合函数的偏导数,并验证\frac{\partial ^2 z}{\partial x^2}+\frac{\partial ^2 z}{\partial y^2}=0.

代码为:

%设置变量
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博客

五、感谢

首先感谢网上关于这方面的资料很多,谢谢其他作者大大的文章对我提供的帮助!

感谢各位观众老爷们能够看到这里。喜欢的话不妨点赞关注一下我!!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值