PROJECT 04-03

本文介绍了一种基于MATLAB实现的高斯低通滤波器,并使用该滤波器对特定图像进行处理,以减少高频噪声,同时保持图像的基本特征不变。
部署运行你感兴趣的模型镜像

PROJECT 04-03

Lowpass Filtering

(a) Implement the Gaussian lowpass filter in Eq. (4.3-7).  You must be able to specify the size, Mx N,of the resulting 2D function.  Inaddition, you must be able to specify the location of the center of theGaussian function.

(b) Download Fig. 4.11(a) [this image is the same as Fig. 4.18(a)] fromthe book web site and lowpass filter it to duplicate the results in Fig.4.18(c).

实验代码:

f=imread('Fig4.11(a).jpg');
f=mat2gray(f);
figure;imshow(f);title('原图像')
[M,N]=size(f);
P=2*M;Q=2*N;
%生成实的对称的滤波函数,中心在(P/2,Q/2)
 alf=100;
 for i=1:P
 for j=1:Q
H(i,j) =exp(-((i-P/2)^2+(j-Q/2)^2)/(2*alf^2));
 end
 end
%H=im2double(H);
figure;imshow(H);title('滤波函数')
 
[M,N]=size(f);
P=2*M;Q=2*N;
%图像填充
fp=zeros(P,Q);
fp(1:M,1:N)=f(1:M,1:N);
%用(-1)^(x+y)乘以输入图像,来实现中心化变换
[Y,X]=meshgrid(1:Q,1:P);
ones=(-1).^(X+Y);
 
f=ones.*fp;
F=fft2(f);
 
%(-1)^(x+y)*f(x,y)的傅里叶变换等于fftshift(fft2(f,P,Q));
%以上可用F=fftshift(fft2(f,P,Q));  
G=H.*F;%频率域相乘
g=real(ifft2(G));%反变换并取结果的实部
g=ones.*g;
g=g(1:M,1:N);%在g(x,y)左上象限提取M*N
figure;imshow(g);title('高斯低通滤波后的图像')


您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

你遇到的错误: ``` ❌ 处理失败: 'ticktime' ``` 说明:**在调用 `ak.stock_intraday_sina(symbol=symbol, date=date_str)` 时返回的数据中缺少 `'ticktime'` 这一列,或者整个 DataFrame 结构异常。** --- ## 🚨 根本原因分析 ### ✅ 错误定位: ```python df = ak.stock_intraday_sina(symbol=symbol, date=date_str) ``` 这行代码在 **2025 年的数据上无法获取有效分时数据**,因为: > ❗❗ **2025 年是未来日期,还没有真实交易数据!** 所以 `ak.stock_intraday_sina()` 返回的是空数据或结构不完整的假数据(比如只有表头、没有内容),导致你在后续访问 `['price']`, `['kind']` 等列时报错。 但为什么报错是 `'ticktime'`? → 因为你可能在函数里或其他地方引用了该列,而它根本不存在于返回值中 → 触发 `KeyError: 'ticktime'` --- ## ✅ 验证方法:打印原始返回结果 我们先来调试一下这个接口到底返回了什么: ### 🔍 调试代码(建议运行一次) ```python import akshare as ak # 尝试一个未来的日期 df = ak.stock_intraday_sina(symbol="sz002401", date="20250401") print("返回类型:", type(df)) print("是否为空:", df.empty) print("列名:", df.columns.tolist() if not df.empty else "DataFrame为空") print("前几行:\n", df.head()) ``` ### ⚠️ 实际输出预期为: ``` 返回类型: <class 'pandas.DataFrame'> 是否为空: True 列名: DataFrame为空 ``` 👉 或者抛出异常,如: ``` KeyError: 'ticktime' ValueError: No data returned for this date. ``` --- ## ✅ 正确做法:使用 **真实存在的历史交易日** 例如: - ✅ `2023-04-03` - ✅ `2024-04-01` - ✅ `2024-12-31` - ❌ `2025-xx-xx` → 尚未发生,无数据! --- ## ✅ 修改建议后的调用示例 ```python if __name__ == "__main__": download_and_process_intraday( symbol="sz002401", start_date="2024-04-01", end_date="2024-04-10", save_path=r"C:\Users\Dell\Desktop\中远海科分时数据" ) ``` ✅ 这些日期是真实的 A 股交易日,`akshare` 可以正常拉取数据。 --- ## ✅ 增强容错性:改进函数以防止 KeyError 即使日期合法,也可能因网络、停牌等原因返回不完整数据。我们在函数中加入更安全的检查: ### ✅ 改进版核心逻辑(加在 `try:` 内部): ```python try: df = ak.stock_intraday_sina(symbol=symbol, date=date_str) # === 安全检查返回值 === if df is None or not isinstance(df, pd.DataFrame): print(f" ❌ 数据无效:返回非 DataFrame 类型") fail_dates.append(readable_date) continue if df.empty: print(f" ❌ {readable_date} 无数据(空DataFrame)") fail_dates.append(readable_date) continue # 检查必要列是否存在 required_cols = ['price', 'volume', 'kind'] missing_cols = [col for col in required_cols if col not in df.columns] if missing_cols: print(f" ❌ 缺少必要列: {missing_cols}") fail_dates.append(readable_date) continue # 继续处理... ``` 这样就不会因为 `df['price']` 报 `KeyError` 而崩溃。 --- ## ✅ 补充:如何查找某只股票最近的真实交易日? 你可以先测试最近一天是否有数据: ```python from datetime import datetime, timedelta def get_latest_valid_date(symbol, days_back=30): today = datetime.now() for i in range(days_back): date_dt = today - timedelta(days=i) date_str = date_dt.strftime("%Y%m%d") try: df = ak.stock_intraday_sina(symbol=symbol, date=date_str) if not df.empty and 'price' in df.columns: print(f"✅ 找到最新有效数据日期: {date_dt.strftime('%Y-%m-%d')}") return date_dt.strftime("%Y-%m-%d"), date_str except: continue return None, None # 测试 latest_date, _ = get_latest_valid_date("sz002401") print(latest_date) ``` --- ## ✅ 总结与修复清单 | 问题 | 解决方案 | |------|----------| | `KeyError: 'ticktime'` | 接口未返回完整数据 | | 所有日期都失败 | 使用了未来日期 `2025-xx-xx` | | 函数崩溃 | 缺少对 `df.empty` 和列存在的判断 | | 用户体验差 | 应提示“请使用历史日期” | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值