当前位置: 首页 > wzjs >正文

邢台做网站推广价格域名转移影响网站访问吗

邢台做网站推广价格,域名转移影响网站访问吗,现在去兰州会不会被隔离,网站开发机构一、实验目的  掌握图像压缩的必要性;  掌握常见的图像压缩标准;  掌握常见的图像压缩方法分类;  掌握常见的图像压缩方法原理与实现(包括哈夫曼编码、算术编码、行程编码方法等);  了解我国音视…

在这里插入图片描述
在这里插入图片描述

一、实验目的

 掌握图像压缩的必要性;
 掌握常见的图像压缩标准;
 掌握常见的图像压缩方法分类;
 掌握常见的图像压缩方法原理与实现(包括哈夫曼编码、算术编码、行程编码方法等);
 了解我国音视频编解码标准的发展。

二、实验内容

  1. 学习图像压缩章节内容。
  2. 读取灰度图像cameraman.jpg和barbara.jpg,从以下方法中选择两种实现对图像的压缩,并显示压缩比和压缩前后对比图像,试分析所选算法的优缺点。
    A.哈夫曼编码; B. 算术编码; C. 行程编码;D. 小波图像编码。

三、完整实验程序、结果与分析

  1. 图像压缩是通过减少图像数据的冗余性来实现高效存储与传输的关键技术,其核心目标是在保证视觉质量的前提下降低数据量。根据压缩后信息是否完整保留,可分为无损压缩和有损压缩两类。
    无损压缩基于统计冗余(如哈夫曼编码、行程编码),通过构建最优编码表将高频像素值用短码表示,实现精确还原但压缩比有限(通常2:1~3:1),适用于医学影像、工程制图等对精度要求严格的场景。
    有损压缩则利用人类视觉特性(如小波编码、JPEG),通过傅里叶变换、小波变换等频域分析分离高频细节与低频主体,结合量化和阈值处理舍弃次要信息,可获得10:1以上的高压缩比,广泛用于网络图像传输和视频流媒体。
    其中,哈夫曼编码通过贪心算法构建最优前缀码树,实现信息熵极限压缩,但需额外存储码表;小波编码通过多分辨率分析实现图像分层压缩,在保留主体特征的同时显著减少数据量,但会引入振铃效应等失真。不同算法在压缩效率、重建质量和计算复杂度上存在显著差异,实际应用需根据场景需求权衡选择。
  2. 选择A.哈夫曼编码和D. 小波图像编码
    代码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

显示压缩比和压缩前后对比图像,试分析所选算法的优缺点。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

哈夫曼编码
压缩比: 通常较低(约1.2-1.5倍),因为自然图像像素分布均匀,且需存储编码表。
优点: 无损压缩,精确还原图像。
缺点: 压缩比低,不适合高压缩需求场景,存储编码表增加额外开销。
小波编码
压缩比: 较高(可达5-10倍),通过去除高频细节实现。
优点: 高压缩比,保留主要视觉特征。
缺点: 有损压缩,高频细节丢失,图像可能出现模糊。
对比结论
哈夫曼编码适用于需要无损压缩的场景(如医学图像),但压缩效率有限。
小波编码适用于允许有损压缩的高效存储(如网络传输),但会损失部分细节。

四、问题及心得

在本次实验中,主要遇到图像读取失败及压缩算法实现问题。读取barbara.jpg时因路径格式错误导致加载失败,经排查发现路径需使用原始字符串(r"...")避免转义,并通过os.path.exists验证路径存在性。此外,文件实际格式与扩展名不符时,OpenCV无法读取,改用PIL库并添加文件头校验后解决。压缩算法方面,哈夫曼编码因像素分布均匀导致压缩比低(约1.3倍),且编码表存储开销大;小波编码通过阈值量化高频分量实现高压缩比(约5倍),但重构图像出现边缘模糊。实验表明,无损压缩(哈夫曼)适合精度要求高的场景,而有损压缩(小波)更适用于存储优化。此次实践深化了对路径处理、文件格式验证及压缩算法特性的理解,同时认识到错误隔离和模块化测试的重要性。

完整代码

import cv2
import numpy as np
import matplotlib.pyplot as plt
import pywt
from heapq import heappush, heappop, heapifyimport os
from PIL import Imageclass HuffmanCoder:def __init__(self):self.codes = {}def _build_heap(self, freq):heap = [[weight, [pixel, ""]] for pixel, weight in freq.items()]heapify(heap)while len(heap) > 1:lo = heappop(heap)hi = heappop(heap)for pair in lo[1:]:pair[1] = '0' + pair[1]for pair in hi[1:]:pair[1] = '1' + pair[1]heappush(heap, [lo[0] + hi[0]] + lo[1:] + hi[1:])return heap[0] if heap else []def _build_codes(self, heap_entry):codes = {}for pair in heap_entry[1:]:pixel, code = paircodes[pixel] = codereturn codesdef encode(self, data):freq = {}for pixel in data.flatten():freq[pixel] = freq.get(pixel, 0) + 1if not freq:return ""heap_entry = self._build_heap(freq)if not heap_entry:return ""self.codes = self._build_codes(heap_entry)encoded_data = ''.join([self.codes[pixel] for pixel in data.flatten()])return encoded_datadef decode(self, encoded_data, shape):inv_codes = {v: k for k, v in self.codes.items()}current_code = ""decoded_pixels = []for bit in encoded_data:current_code += bitif current_code in inv_codes:decoded_pixels.append(inv_codes[current_code])current_code = ""return np.array(decoded_pixels, dtype=np.uint8).reshape(shape)def compress_huffman(img):coder = HuffmanCoder()encoded_data = coder.encode(img)data_bits = len(encoded_data)table_bits = 0for pixel, code in coder.codes.items():table_bits += 8 + 4 + len(code)total_bits = data_bits + table_bitsdecoded_img = coder.decode(encoded_data, img.shape)return decoded_img, total_bitsdef compress_wavelet(img, threshold=10.0, quant_factor=20):coeffs = pywt.wavedec2(img, 'haar', level=1)coeff_arr, coeff_slices = pywt.coeffs_to_array(coeffs)coeff_arr_thresh = coeff_arr.copy()coeff_arr_thresh[np.abs(coeff_arr_thresh) < threshold] = 0quantized = np.round(coeff_arr_thresh * quant_factor).astype(np.int32)non_zero = quantized != 0non_zero_coords = np.transpose(np.nonzero(non_zero))non_zero_values = quantized[non_zero]num_non_zero = len(non_zero_values)total_bits = num_non_zero * (16 + 32)dequantized = non_zero_values.astype(np.float32) / quant_factorrecon_coeff_arr = np.zeros_like(coeff_arr, dtype=np.float32)recon_coeff_arr[non_zero] = dequantizedrecon_coeffs = pywt.array_to_coeffs(recon_coeff_arr, coeff_slices, output_format='wavedec2')reconstructed = pywt.waverec2(recon_coeffs, 'haar')reconstructed = np.clip(reconstructed, 0, 255).astype(np.uint8)return reconstructed, total_bitsdef plot_images(original, reconstructed, title, compression_ratio):plt.figure(figsize=(10, 5))plt.subplot(1, 2, 1)plt.imshow(original, cmap='gray')plt.title('Original Image')plt.axis('off')plt.subplot(1, 2, 2)plt.imshow(reconstructed, cmap='gray')plt.title(f'{title}\nCR: {compression_ratio:.2f}')plt.axis('off')plt.show()def safe_imread(path):# 基础路径验证if not os.path.exists(path):print(f"❌ 路径不存在: {path}")print("可能原因:")print(f"1. 请检查D盘是否存在")print(f"2. 确认完整路径:{os.path.abspath(path)}")return None# 文件权限检查if not os.access(path, os.R_OK):print(f"⛔ 无读取权限: {path}")return None# 文件大小检查file_size = os.path.getsize(path)if file_size < 1024:print(f"⚠️ 文件过小({file_size}字节),可能已损坏: {path}")# 尝试用OpenCV读取img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)if img is not None:return imgtry:print(f"⚠️ OpenCV读取失败,尝试PIL读取: {path}")pil_img = Image.open(path).convert('L')return np.array(pil_img, dtype=np.uint8)except Exception as e:print(f"❌ 双重读取均失败: {path}")print(f"错误详情: {str(e)}")# 文件头验证with open(path, 'rb') as f:header = f.read(4).hex()print(f"📄 文件头(十六进制): {header}")print("正常JPEG应以 ffd8ff 开头")return Nonedef main():img_paths = [r"D:\tuxiang\cameraman.jpg",  # 使用原始字符串r"D:\tuxiang\barbara.jpg",]for path in img_paths:print(f"\n{'=' * 40}\n处理图像: {path}")# 安全读取图像img = safe_imread(path)if img is None:print("跳过处理...")continue# 显示基本信息print(f"✅ 成功读取 | 尺寸: {img.shape} | 数据类型: {img.dtype}")# 哈夫曼编码try:huff_img, huff_bits = compress_huffman(img)cr_huff = (img.size * 8) / huff_bits if huff_bits != 0 else 0plot_images(img, huff_img, 'Huffman Encoding', cr_huff)except Exception as e:print(f"哈夫曼编码错误: {str(e)}")# 小波编码try:wavelet_img, wavelet_bits = compress_wavelet(img)cr_wavelet = (img.size * 8) / wavelet_bits if wavelet_bits != 0 else 0plot_images(img, wavelet_img, 'Wavelet Encoding', cr_wavelet)except Exception as e:print(f"小波编码错误: {str(e)}")if __name__ == "__main__":main()

文章转载自:

http://UqE9IQgT.hqnsf.cn
http://fGQZKxfs.hqnsf.cn
http://3RiUzxq9.hqnsf.cn
http://z2a1awfh.hqnsf.cn
http://HZWbvlDr.hqnsf.cn
http://mHL7r5HG.hqnsf.cn
http://Q1J9bCSO.hqnsf.cn
http://CHZ6TgqM.hqnsf.cn
http://WoJoFUjj.hqnsf.cn
http://BNbgO9yt.hqnsf.cn
http://orxV5V0r.hqnsf.cn
http://J8sOJhfX.hqnsf.cn
http://K2UwKvvq.hqnsf.cn
http://NXCZ0iGH.hqnsf.cn
http://o1MgX6JY.hqnsf.cn
http://EA4QWwZl.hqnsf.cn
http://qztAQzFR.hqnsf.cn
http://5Ia0xww2.hqnsf.cn
http://NMstXeHP.hqnsf.cn
http://ohyHz723.hqnsf.cn
http://fPkf8ypa.hqnsf.cn
http://rogxkBGP.hqnsf.cn
http://rPNTAXGz.hqnsf.cn
http://it8aYIMe.hqnsf.cn
http://A5cd19zT.hqnsf.cn
http://ot8Mdumi.hqnsf.cn
http://2ipGQqGj.hqnsf.cn
http://GkfXKTFP.hqnsf.cn
http://7MTVwHV8.hqnsf.cn
http://JdjlbVii.hqnsf.cn
http://www.dtcms.com/wzjs/675805.html

相关文章:

  • 怎样建网站视频教程上海网站建设 知名做
  • 小网站搜什么关键词vi设计的概念
  • 旅游网站建设经费预算wordpress 代码缩进
  • 餐饮网站做的比较好的是哪个做网站要服务器和什么软件
  • 青岛市网站建设公司西安网站优化培训
  • 网站开发需要人员百度seo怎么关闭
  • 百度网站建设中的自由容器家具网站建设案例
  • 服务器访问不了网站东莞h5网站开发
  • 西安晨曦e动网站建设wordpress2016
  • 北京建公司网站价格小蘑菇网站开发
  • 做微信公众号的网站有哪些caddy搭建wordpress
  • 中国做趋势的网站网络营销公司组织架构
  • 货物公司网站建设方案深圳市长城建设有限公司网站
  • 对加强政务门户网站建设的意见深圳网站设计定制开发
  • 网站制作公司排行榜汽车网站建设论文
  • 梅花手表网站网站建设最好的
  • 手机电子商务网站建设策划书学服装设计培训机构
  • 网站被黑是怎么回事啊新网个人网站备案
  • 湖南网站建设公司速来磐石网络网站公司制作
  • 泾阳县建设局网站163网站视频动做
  • 深圳网站制作网站建设怎么制作网站深圳博纳做网站主页上主要放哪些内容
  • 地下城钓鱼网站如何做wordpress 手机看不了视频播放器
  • 百竞(湘潭)网站建设丰台路网站建设
  • 影视网站cpa 如何做wordpress后台登陆显示404
  • 云南省建设项目申报网站福州市城乡建设局
  • 网站排名查询站长之家wordpress translate
  • 做个企业网站要多少钱2 网站内部链接优化
  • 做公关用的网站阜阳手机网站制作
  • 建站网站和维护需要会什么区别个人网页设计说明模板
  • 专业行业网站开发报价营销型网站可以吗