作业1:针对添加了零均值高斯噪声的图像,以取得尽可能好的处理效果为目的,采用不少于3种方法进行处理;对处理结果进行定性和定量的比较、并得出相应的结论。 二、作业2 下图存在明显的光照不均,设计算法对其进行校正。 三、作业3 作业3:编程,在下面两幅图像中找不同,并将不同之处标出来。提示:两幅图像没有对齐(有一定的平移量);首先通过算法对齐图像。 ### 机器视觉大作业报告-matlab #### 作业1:针对添加了零均值高斯噪声的图像处理 **目的:** 对于添加了零均值高斯噪声的图像,采用不少于三种方法进行处理,以达到尽可能好的处理效果。 **处理方法:** 1. **均值滤波** - **基本原理:** 图像的均值滤波用于减少图像中的噪声和细节。其基本原理是用像素周围邻域内像素值的平均值来替代该像素的值。 - **实施步骤:** 1. **确定滤波器大小:** 一般选择正方形或矩形区域,常见尺寸为3x3、5x5等。 2. **计算平均值:** 对于图像中的每个像素,将滤波器放置在该像素周围的邻域内,提取邻域内的像素值并计算平均值。 3. **替换像素值:** 将计算得到的平均值作为该像素的新值,用于替代原始像素的值。 - **特点:** - 能够有效地平滑图像,减少噪声的影响。 - 较大的滤波器会更加平滑图像,但可能会导致更多的细节丢失。 - 较小的滤波器可以保留更多的细节,但可能无法有效地降低噪声水平。 2. **中值滤波** - **基本原理:** 中值滤波是一种非线性滤波方法,其基本原理是用图像中像素值的中值来替代该像素点的值。 - **实施步骤:** 1. **选取滤波窗口:** 遍历输入图像的每个像素点,统计滤波窗口内的所有像素值。 2. **计算中值:** 将这些像素值排序,用排序后位于中间位置的值(中值)来替代当前像素点的值。 - **特点:** - 对脉冲噪声和椒盐噪声具有很好的滤除效果。 - 边缘保持性好,能够很好地保留图像边缘细节,避免图像模糊问题。 - 不易产生新的灰度值,保证了输出图像的自然性。 3. **高斯滤波** - **基本原理:** 高斯滤波基于高斯函数的原理,通过对图像中的每个像素点及其周围像素点进行加权平均来实现平滑效果。 - **实施步骤:** 1. **定义滤波模板:** 选择一个奇数大小的矩阵,如3x3、5x5等。 2. **加权平均:** 对于图像中的每个像素点,将其与周围像素点进行加权平均,权重由高斯函数计算得出。 - **特点:** - 可以有效地平滑图像,去除图像中的高频噪声,同时保留图像的主要特征。 - 距离中心点越远的像素点,其权重越小;距离中心点越近的像素点,其权重越大。 **解题步骤:** 1. **读取图像:** 使用`imread`函数读取原始图像和添加了高斯噪声的图像。 2. **转换为灰度图像:** 对彩色图像进行rgb2gray转换。 3. **执行滤波操作:** 使用`imfilter`、`medfilt2`和`imgaussfilt`函数分别进行均值滤波、中值滤波和高斯滤波。 4. **画图比较:** 使用Matlab中的绘图功能对比原图和滤波后的图像。 5. **计算均方误差:** 使用`mean`函数计算原始图像与每种滤波结果之间的均方误差。 6. **显示MSE结果:** 使用`disp`函数显示每种滤波方法对应的MSE结果。 **程序代码:**(部分代码示例) ```matlab clc; clear all; close all; % 读取图像 I0 = imread('lena.bmp'); I1 = imread('lena_noisy01.jpg'); img2 = imread('lena_noisy02.bmp'); img1 = rgb2gray(I1); % 均值滤波 mean_filtered1 = imfilter(img1, fspecial('average', [3, 3])); mean_filtered2 = imfilter(img2, fspecial('average', [3, 3])); % 中值滤波 median_filtered1 = medfilt2(img1); median_filtered2 = medfilt2(img2); % 高斯滤波 gaussian_filtered1 = imgaussfilt(img1, 2); gaussian_filtered2 = imgaussfilt(img2, 2); % 显示结果 figure; subplot(2,3,1), imshow(I0), title('Original Image'); subplot(2,3,2), imshow(mean_filtered1), title('Mean Filtered'); subplot(2,3,3), imshow(median_filtered1), title('Median Filtered'); subplot(2,3,4), imshow(gaussian_filtered1), title('Gaussian Filtered'); % 计算MSE mse_mean = mean((I0(:) - mean_filtered1(:)).^2); mse_median = mean((I0(:) - median_filtered1(:)).^2); mse_gaussian = mean((I0(:) - gaussian_filtered1(:)).^2); % 显示MSE disp(['MSE for Mean Filter: ', num2str(mse_mean)]); disp(['MSE for Median Filter: ', num2str(mse_median)]); disp(['MSE for Gaussian Filter: ', num2str(mse_gaussian)]); ``` **结论:** 通过对添加了零均值高斯噪声的图像采用均值滤波、中值滤波和高斯滤波三种方法进行处理,并对处理结果进行了定性和定量的比较。结果表明,三种方法均能有效降低图像中的噪声,但各自的适用场景和效果有所不同。具体来说,中值滤波对于脉冲噪声和椒盐噪声有更好的滤除效果,而高斯滤波在保留更多细节的同时也能够较好地平滑图像。均方误差(MSE)的计算结果也验证了这一结论。 --- #### 作业2:光照不均的校正 **目的:** 设计算法对存在明显光照不均的图像进行校正。 **解决方案:** 1. **直方图均衡化:** 通过调整图像的亮度分布,使图像的整体亮度分布更均匀。 2. **自适应直方图均衡化:** 在局部区域内进行直方图均衡化,以增强局部对比度。 3. **局部光照校正:** 识别图像中的光照差异,通过加权调整来改善光照不均。 **实现步骤:** 1. **直方图均衡化:** 使用`histeq`函数进行全局直方图均衡化。 2. **自适应直方图均衡化:** 使用`adapthisteq`函数进行局部直方图均衡化。 3. **局部光照校正:** 通过计算图像的局部平均亮度,然后调整局部区域的亮度值。 **程序代码示例:** ```matlab % 读取图像 I = imread('uneven_illumination.bmp'); I_gray = rgb2gray(I); % 直方图均衡化 I_histeq = histeq(I_gray); % 自适应直方图均衡化 I_adapthisteq = adapthisteq(I_gray); % 局部光照校正 % 示例代码,需根据实际情况调整 window_size = 50; % 滑动窗口大小 pad = floor(window_size / 2); I_padded = padarray(I_gray, [pad pad], 'replicate'); I_local_avg = zeros(size(I_gray)); for i = 1:size(I_gray, 1) for j = 1:size(I_gray, 2) I_local_avg(i, j) = mean(I_padded(i:i+window_size-1, j:j+window_size-1)); end end I_corrected = I_gray ./ I_local_avg; % 显示结果 figure; subplot(2,2,1), imshow(I_gray), title('Original Image'); subplot(2,2,2), imshow(I_histeq), title('Histogram Equalization'); subplot(2,2,3), imshow(I_adapthisteq), title('Adaptive Histogram Equalization'); subplot(2,2,4), imshow(I_corrected), title('Local Illumination Correction'); ``` **结论:** 通过上述方法可以有效校正图像中存在的光照不均现象,提高了图像的整体视觉效果。 --- #### 作业3:图像找不同 **目的:** 编程找出两幅图像的不同之处,并将不同之处标记出来。 **提示:** - 两幅图像没有对齐(有一定的平移量); - 首先通过算法对齐图像。 **解决方案:** 1. **图像配准:** 使用特征匹配技术对两幅图像进行配准。 2. **差异检测:** 计算配准后图像之间的差异。 3. **标记不同之处:** 将差异较大的像素点标记出来。 **实现步骤:** 1. **图像配准:** 使用SIFT、SURF等特征检测方法找到两幅图像的关键点,并进行匹配。 2. **差异检测:** 使用绝对差分的方法计算配准后图像之间的差异。 3. **标记不同之处:** 使用阈值分割方法标记出差异较大的像素点。 **程序代码示例:** ```matlab % 读取图像 I1 = imread('image1.bmp'); I2 = imread('image2.bmp'); % 图像配准 % 示例代码,需根据实际情况调整 points1 = detectSURFFeatures(rgb2gray(I1)); points2 = detectSURFFeatures(rgb2gray(I2)); [features1, points1] = extractFeatures(rgb2gray(I1), points1); [features2, points2] = extractFeatures(rgb2gray(I2), points2); indexPairs = matchFeatures(features1, features2); matchedPoints1 = points1(indexPairs(:,1)); matchedPoints2 = points2(indexPairs(:,2)); tform = estimateGeometricTransform(matchedPoints1, matchedPoints2, 'affine'); I2_aligned = imwarp(I2, tform, 'OutputView', imref2d(size(I1))); % 差异检测 diff_image = abs(rgb2gray(I1) - rgb2gray(I2_aligned)); % 标记不同之处 threshold = graythresh(diff_image); binary_diff = diff_image > threshold; labeled_diff = bwlabel(binary_diff); % 显示结果 figure; subplot(1,3,1), imshow(I1), title('Image 1'); subplot(1,3,2), imshow(I2_aligned), title('Aligned Image 2'); subplot(1,3,3), imshow(label2rgb(labeled_diff)), title('Differences'); ``` **结论:** 通过图像配准技术和差异检测方法,成功找出了两幅图像的不同之处,并将这些不同之处清晰地标记了出来。这种方法不仅可以应用于图像质量检查等领域,还可以扩展到更复杂的图像分析任务中。
- 粉丝: 330
- 资源: 675
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助