MATLAB图像处理常用命令和基本操作

一、实验目的

1、熟悉及掌握图像的采样原理,实现图像的采样过程,进行图像的灰度转换。

2、理解直方图的概念及应用,实现图像直方图的显示,及通过直方图均衡和直方图规定

化方法对图像进行修正。(直方图显示,计算并绘制图像直方图,直方图均衡化)

二、实验环境

MATLAB 2016以上版本、WIN XP或WIN2000计算机

  • 常用函数和调用格式

图像的增强

1、直方图

imhist函数用于数字图像的直方图计算或显示,

imhist(I, n)计算和显示图像Ⅰ的直方图,n为指定的灰度级数目,默认为256。如果I是二值图像,那么n仅有两个值。

[counts,x] = imhist(...)返回直方图数据向量counts,相应的色彩值向量x。

如: i=imread('e: \wO1.tif');

imhist(i);

2、直方图均衡化

histeq函数用于数字图像的直方图均衡化,

J= histeq(I, n)均衡化后的级数n,缺省值为64。

J= histeq(I, hgram)"直方图规定化",即将原是图象Ⅰ的直方图变换成用户指定的向量hgram(即指定另一幅图像的直方图数据向量)。

如:

i=imread('e: [wO1.tif' );

j=histeq(I,N);对图像i执行均衡化,得到具有N个灰度级的灰度图像j,N缺省值为64

3、灰度调整

imadjust函数用于数字图像的灰度或颜色调整,

j = imadjust(I)将灰度图像Ⅰ中的亮度值映射到〕中的新值并使1%的数据是在低高强度和饱和,这增加了输出图像〕的对比度值。

j= imadjust(L,[low_in; high_in],[low_out; high_out])

将图像Ⅰ中的亮度值映射到J中的新值,即将low_in 至 high_in之间的值映射到

low_out 至 high_out之间的值。low_in 以下与 high_in以上的值被剪切掉了,也就是说,low_in以下的值映射到low_out, high_in 以上的值映射到high_out。它们都可以使用空的矩阵[门,默认值是[0 1]。

如:

i=imread('e: [wO1.tif');

j=imadjust(i,[0.3,0.7],[]);将图像i转换为j,使灰度值从0.3~0.7与缺省值O~1相匹配

运算函数

1、Zeros生成全О数组或矩阵

如B = zeros(m,n) or B = zeros([m n])返回一个m*n全0矩阵2、取整函数

2取整函数

floor最小取整函数

round四舍五入取整函数ceil最大取整函数

如a =[-1.9,-0.2,3.4,5.6,7.0,2.4+3.6i];

I=round(a)

Ⅰ =[-2 03 67 2+4i];

对一幅图像进行2倍、4倍、8倍、16倍减采样,显示结果

imageFilePath = 'E:\photo\image3.jpg';  % 读取图像
 
if exist(imageFilePath, 'file') == 2
    % 读取图像
    originalImage = imread(imageFilePath);
    % 检查图像的尺寸
    [height, width, ~] = size(originalImage);
    fprintf('原始图像尺寸: %dx%d\n', height, width);
    
    % 创建一个图形窗口
    figure;
    
    % 显示原始图像
    subplot(2, 2, 1); % (行数, 列数, 当前位置)
    imshow(originalImage);
    title('原始图像');
    
    % 2倍减采样
    downsampledBy2 = imresize(originalImage, 0.5);
    subplot(2, 2, 2);
    imshow(downsampledBy2);
    title('2倍减采样');
    
    % 4倍减采样
    downsampledBy4 = imresize(originalImage, 0.25);
    subplot(2, 2, 3);
    imshow(downsampledBy4);
    title('4倍减采样');
    
    % 8倍减采样
    downsampledBy8 = imresize(originalImage, 0.125);
    subplot(2, 2, 4);
    imshow(downsampledBy8);
    title('8倍减采样');
    
    % 16倍减采样
    downsampledBy16 = imresize(originalImage, 0.0625);
    subplot(2, 3, 1); % 注意这里的行列配置,以便在2行3列的布局中添加第5个子图
    imshow(downsampledBy16);
    title('16倍减采样');
else
    error('文件 %s 不存在,请确保图像文件位于当前工作目录中。', imageFilePath);
end

显示一幅灰度图像a,改变图像亮度使其整体变暗得到图像b,显示两幅图像的直方图。

imageFilePath = 'E:\photo\image3.jpg';
if exist(imageFilePath, 'file') == 2
    % 读取彩色图片
    colorImage = imread(imageFilePath);
    
    % 将彩色图片转换为灰度图像
    grayImage = rgb2gray(colorImage);
    
    % 改变图像亮度,使图像变暗
    darkeningFactor = 0.5; % 变暗因子
    darkGrayImage = uint8(grayImage * darkeningFactor); % 使用uint8确保像素值在0到255范围内
    
    % 创建一个图形窗口,并在一个2x2的布局中显示图像和直方图
    figure;
    
    % 显示原始灰度图像
    subplot(2, 2, 1);
    imshow(grayImage);
    title('原始灰度图像');
    
    % 显示变暗后的灰度图像
    subplot(2, 2, 2);
    imshow(darkGrayImage);
    title('变暗后的灰度图像');
    
    % 计算并显示原始灰度图像的直方图
    subplot(2, 2, 3);
    histObj = histogram(grayImage, 256); % 计算直方图
    bins = histObj.BinEdges; % 提取bins的边界
    weights = histObj.BinCounts; % 提取每个bin的计数
    bar(bins(1:end-1), weights, 'FaceColor', 'b'); % 绘制直方图
    title('原始灰度图像的直方图');
    xlabel('灰度级别');
    ylabel('频率');
    
    % 计算并显示变暗后灰度图像的直方图
    subplot(2, 2, 4);
    histObjDark = histogram(darkGrayImage, 256); % 计算直方图
    binsDark = histObjDark.BinEdges; % 提取bins的边界
    weightsDark = histObjDark.BinCounts; % 提取每个bin的计数
    bar(binsDark(1:end-1), weightsDark, 'FaceColor', 'r'); % 绘制直方图
    title('变暗后灰度图像的直方图');
    xlabel('灰度级别');
    ylabel('频率');
else
    error('文件 %s 不存在,请确保彩色图片文件位于当前工作目录中。', imageFilePath);
end

对图像b进行直方图均衡化,显示结果图像和对应直方图。

imageFilePath = 'E:\photo\image3.jpg';
if exist(imageFilePath, 'file') == 2
    % 读取彩色图片
    colorImage = imread(imageFilePath);
    
    % 将彩色图片转换为灰度图像
    grayImage = rgb2gray(colorImage);
    
    % 对灰度图像进行直方图均衡化
    eqImage = histeq(grayImage);
    % 创建一个图形窗口,并在一个2x2的布局中显示图像和直方图
    figure;
    
    % 显示原始灰度图像
    subplot(2, 2, 1);
    imshow(grayImage);
    title('原始灰度图像');
    
    % 显示直方图均衡化后的图像
    subplot(2, 2, 2);
    imshow(eqImage);
    title('直方图均衡化后的图像');
    
    % 计算并显示原始灰度图像的直方图
    subplot(2, 2, 3);
    histData = histogram(grayImage(:));
    bins = histData.BinEdges; % 提取bins的边界
    weights = histData.BinCounts; % 提取每个bin的计数
    bar(bins(1:end-1), weights, 'FaceColor', 'b'); % 绘制直方图
    title('原始灰度图像的直方图');
    xlabel('灰度级别');
    ylabel('频率');
    
    % 计算并显示直方图均衡化后图像的直方图
    subplot(2, 2, 4);
    histDataEq = histogram(eqImage(:));
    binsEq = histDataEq.BinEdges; % 提取bins的边界
    weightsEq = histDataEq.BinCounts; % 提取每个bin的计数
    bar(binsEq(1:end-1), weightsEq, 'FaceColor', 'r'); % 绘制直方图
    title('直方图均衡化后图像的直方图');
    xlabel('灰度级别');
    ylabel('频率');
else
    error('文件 %s 不存在,请确保彩色图片文件位于当前工作目录中。', imageFilePath);
end

读入图像c,执行直方图规定化,使图像a的灰度分布与c大致相同,显示变换后图像及对应直方图。

% 读取原始图像和目标图像
originalImage = imread('E:\photo\image2.jpg');
targetImage = imread('E:\photo\image3.jpg');
% 将原始图像和目标图像转换为灰度图像
originalGray = rgb2gray(originalImage);
targetGray = rgb2gray(targetImage);
I=rgb2gray(originalImage);
J= histeq(I,64);
%均衡化成32个灰度级的直方图
[counts,x]=imhist(J); 
%返回直方图图像向量counts
Q=rgb2gray(targetImage);
M=histeq(Q,counts);
%将原始图像Q的直方图变成指定向量counts
figure;
subplot(3,2,1); imshow(I); title('原始图像 1');
subplot(3,2,2); imshow(Q); title('原始图像2');
subplot(3,2,3); imhist(I);
title('原始图像1直方图');
subplot(3,2,4); imhist(Q);
title('原始图像2直方图');
subplot(3,2,5); imhist(J);
title('均衡化成32个灰度级的直方图');
subplot(3,2,6); imhist(M); title('均衡化后 的直方图');

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值