212345

import torch
import torch.nn.functional as F
from PIL import Image
import numpy as np
import argparse
import os
import torchvision.transforms as transforms

def process_image_frequency(image_path, output_path, source_freq=16, target_freq=14):
    """
    将图像从源频率等级处理为目标频率等级
    
    参数:
    - image_path: 输入图像路径
    - output_path: 输出图像保存路径
    - source_freq: 源频率等级
    - target_freq: 目标频率等级
    """
    # 加载图像
    img = Image.open(image_path).convert('RGB')
    transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])  # 归一化到[-1, 1]
    ])
    img_tensor = transform(img).unsqueeze(0)  # 添加批次维度 [1, C, H, W]
    
    # 获取图像尺寸
    _, _, H, W = img_tensor.shape
    
    print(f"原始图像尺寸: {H}x{W}")
    print(f"处理中: 从频率等级 {source_freq} 降低到 {target_freq}")
    
    # 使用FAR的频率处理方法
    # 1. 先降采样到目标频率对应的分辨率
    target_size = (target_freq, target_freq)
    downsampled = F.interpolate(img_tensor, size=target_size, mode='area')
    
    # 2. 然后上采样回原始分辨率
    processed = F.interpolate(downsampled, size=(H, W), mode='bicubic')
    
    # 将张量转换回图像格式
    # 从[-1,1]转回[0,1]再转到[0,255]
    processed = processed * 0.5 + 0.5
    processed = processed.clamp(0, 1)
    processed = processed.squeeze(0).permute(1, 2, 0).cpu().numpy()
    processed = (processed * 255).astype(np.uint8)
    
    # 保存图像
    output_img = Image.fromarray(processed)
    output_img.save(output_path)
    
    print(f"处理完成! 已保存到: {output_path}")
    return processed

def main():
    parser = argparse.ArgumentParser(description='图像频率处理工具')
    parser.add_argument('--input', type=str, required=True, help='输入图像路径')
    parser.add_argument('--output', type=str, help='输出图像路径')
    parser.add_argument('--source_freq', type=int, default=16, help='源频率等级')
    parser.add_argument('--target_freq', type=int, default=14, help='目标频率等级')
    
    args = parser.parse_args()
    
    input_path = args.input
    if args.output:
        output_path = args.output
    else:
        # 如果没有指定输出路径,则在原文件名后添加频率等级信息
        filename, ext = os.path.splitext(input_path)
        output_path = f"{filename}_freq{args.target_freq}{ext}"
    
    process_image_frequency(
        input_path, 
        output_path, 
        args.source_freq, 
        args.target_freq
    )

if __name__ == "__main__":
    main()

参考资源链接:[数字设计基础与实践:探索数字电路](https://wenku.youkuaiyun.com/doc/64acabbab9988108f212345c?utm_source=wenku_answer2doc_content) 在数字系统设计中,组合逻辑电路是一个非常基础且重要的组成部分。为了分析并实现特定功能的组合逻辑电路,首先需要熟悉基本的数字逻辑门及其功能。接下来,根据功能需求,可以使用逻辑表达式来描述电路应有的行为。然后,利用逻辑代数的规则和方法(如卡诺图和奎因-麦克拉斯基方法)化简逻辑表达式,以达到简化电路的目的。 在化简逻辑表达式后,我们可以通过逻辑门的组合来实现电路设计。例如,假设我们需要设计一个简单的3输入的奇偶校验电路,其功能是输出1当且仅当输入的二进制数中包含奇数个1。首先,我们可以写出逻辑表达式: P = A XOR B XOR C 其中,P是奇偶校验位,A、B、C是输入信号。通过真值表分析后,我们可以得到: A | B | C | P ------------- 0 | 0 | 0 | 0 0 | 0 | 1 | 1 0 | 1 | 0 | 1 0 | 1 | 1 | 0 1 | 0 | 0 | 1 1 | 0 | 1 | 0 1 | 1 | 0 | 0 1 | 1 | 1 | 1 观察真值表可以发现,P的输出恰好与输入信号A、B、C的异或结果相同,因此可以直接用三个异或门实现该逻辑电路。最终的电路设计将包含三个输入端、三个异或门以及一个输出端,实现了所需的奇偶校验功能。 如果希望进一步深入学习数字设计的相关知识,特别是组合逻辑和时序逻辑的设计与实践,建议参考《数字设计基础与实践:探索数字电路》一书。这本书不仅详细介绍了数字设计的理论基础,还提供了丰富的实践例子,帮助读者更好地理解并掌握数字电路设计的过程和技巧。 参考资源链接:[数字设计基础与实践:探索数字电路](https://wenku.youkuaiyun.com/doc/64acabbab9988108f212345c?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值