数字图像处理-Matlab实现图像的统计特征

 

目录

 

寻找最大值和索引

寻找最小值和索引

计算平均值

计算方差

计算灰阶频数

以上函数的测试脚本

测试脚本结果


寻找最大值和索引

function [MaxValue,iMaxValueIndex,jMaxValueIndex] = MaxValueFun(InputImage)
%================================================================
% 功能:计算最大值和索引
% 参数:InputImage为输入单通道图像
% 返回值:MaxValue为最大值,iMaxValueIndex,jMaxValueIndex为最大值索引,如果有多个则返回多个
% 主要思路:利用循环
% 备注:使用Max函数将会提高运算
% 调用方法:[MaxValue,iMaxValueIndex,jMaxValueIndex] = MaxValueFun(InputImage)
% 日期:2019.11.26
% 作者:Leetion
[iLimit,jLimit] = size(InputImage);
MaxValue = 0;
iMaxValueIndex = [iLimit];
jMaxValueIndex = [jLimit];
NumMaxValue = 1;
for iImageIndex = 1:iLimit
    for jImageIndex = 1:jLimit
        if (InputImage(iImageIndex,jImageIndex) > MaxValue)
            MaxValue = InputImage(iImageIndex,jImageIndex);
            iMaxValueIndex = [iImageIndex];
            jMaxValueIndex = [jImageIndex];
            NumMaxValue = 1;
        elseif(InputImage(iImageIndex,jImageIndex) == MaxValue)
            NumMaxValue = NumMaxValue+1;
            iMaxValueIndex(NumMaxValue) = iImageIndex;
            jMaxValueIndex(NumMaxValue) = jImageIndex;
        end   
    end
end
end

寻找最小值和索引

function [MinValue,iMinValueIndex,jMinValueIndex] = MinValueFun(InputImage)
%================================================================
% 功能:计算最小值和索引
% 参数:InputImage为输入单通道图像
% 返回值:MinValue为最大值,iMinValueIndex,jMinValueIndex为最大值索引,如果有多个则返回多个
% 主要思路:利用循环
% 备注:使用Min函数将会提高运算
% 调用方法:[MinValue,iMinValueIndex,jMinValueIndex] = MinValueFun(InputImage)
% 日期:2019.11.26
% 作者:Leetion
[iLimit,jLimit] = size(InputImage);
MinValue = 1e6;
iMinValueIndex = [];
jMinValueIndex = [];
NumMinValue = 1;
for iImageIndex = 1:iLimit
    for jImageIndex = 1:jLimit
        if(InputImage(iImageIndex,jImageIndex) < MinValue)
            MinValue = InputImage(iImageIndex,jImageIndex);
            iMinValueIndex = [iImageIndex];
            jMinValueIndex = [jImageIndex];
            NumMinValue = 1;
        elseif(InputImage(iImageIndex,jImageIndex) == MinValue)
            NumMinValue = NumMinValue+1;
            iMinValueIndex(NumMinValue) = iImageIndex;
            jMinValueIndex(NumMinValue) = jImageIndex;
        end
    end
end
end

计算平均值

function MeanValue= MeanValueFun(InputImage)
%================================================================
% 功能:计算均值
% 参数:InputImage为输入单通道图像
% 返回值:MeanValue为均值
% 主要思路:利用循环
% 备注:使用Mean函数将会提高运算
% 调用方法:MeanValue= MeanValueFun(InputImage)
% 日期:2019.11.26
% 作者:Leetion
SumValue = 0;
MeanValue = 0;
[iLimit,jLimit] = size(InputImage);
for iImageIndex = 1:iLimit
    for jImageIndex = 1:jLimit
        SumValue = SumValue+InputImage(iImageIndex,jImageIndex);
    end
end
MeanValue = SumValue/(iLimit*jLimit);
end

计算方差

function VarValue = VarValueFun(InputImage)
%================================================================
% 功能:计算方差
% 参数:InputImage为输入单通道图像
% 返回值:VarValue为方差
% 主要思路:利用循环
% 备注:使用Var函数将会提高运算
% 调用方法:VarValue = VarValueFun(InputImage)
% 日期:2019.11.26
% 作者:Leetion
[iLimit,jLimit] = size(InputImage);
[SumValue,MeanValue,VarValue] = deal(0,0,0);
[iLimit,jLimit] = size(InputImage);
for iImageIndex = 1:iLimit
    for jImageIndex = 1:jLimit
        SumValue = SumValue+InputImage(iImageIndex,jImageIndex);
    end
end
MeanValue = SumValue/(iLimit*jLimit);
for iImageIndex = 1:iLimit
    for jImageIndex = 1:jLimit
      VarValue = VarValue+(InputImage(iImageIndex,jImageIndex)-MeanValue)^2;  
    end
end
VarValue = VarValue/(iLimit*jLimit);
end

计算灰阶频数

function [Gray,GrayCount] = GrayCountFun(InputImage)
%================================================================
% 功能:灰度值计数
% 参数:InputImage为输入单通道图像
% 返回值:GrayCount为Gray同维灰度计数数组
% 主要思路:利用循环
% 备注:相当于库函数imhist
% 调用方法:[Gray,GrayCount] = GrayCountFun(InputImage)
% 日期:2019.11.26
% 作者:Leetion
InputImage = InputImage+1;%%防止找不到索引
[iLimit,jLimit] = size(InputImage);
% MaxValue = max(max(InputImage));
% MinValue = min(min(InputImage));
% Gray = [MinValue:MaxValue];
% GrayCount = zeros(1,MaxValue+1-MinValue);
Gray = [0:255];
GrayCount = zeros(1,256);
for iImageIndex = 1:iLimit
    for jImageIndex = 1:jLimit
        GrayCount(InputImage(iImageIndex,jImageIndex)) = GrayCount(InputImage(iImageIndex,jImageIndex))+1;
    end
end
end

以上函数的测试脚本

%================================================================
% 功能:求特征值,绘制直方图
% 主要思路:
% 备注:
% 日期:2019.11.26
% 作者:Leetion
clc,clear
close all
ImagePath ='E:\17.MatlabWorks\03.数字图像处理\00.Matlab内置图片库\';
FileName ='moon.tif';
FileType = FileName(end-2:end);
FullFile =[ImagePath FileName];
if(FileType ~= "bmp")
    InputImage = imread(FullFile,FileType);
else
    [InputImageIndex,ColorMap] = imread(FullFile,FileType);
    InputImage = ind2rgb(InputImageIndex,ColorMap);
end
if size(InputImage,3) == 3
    InputImageGray = double(rgb2gray(imgInputImage));
else
    InputImageGray = double(InputImage);
end
[iLimit,jLimit] = size(InputImageGray);
% VectorInputImageGray = InputImageGray(:);
[MaxValue,iMaxValueIndex,jMaxValueIndex] = MaxValueFun(InputImageGray);
[MinValue,iMinValueIndex,jMinValueIndex] = MinValueFun(InputImageGray);
[Gray,GrayCount] = GrayCountFun(InputImageGray);
figure(2);
GrayValueNumber = zeros(MaxValue-MinValue+1,1);
subplot(1,3,1);
imshow(InputImage); 
title('InputImage');
subplot(1,3,2);
[counts,x] = imhist(uint8(InputImageGray));
bar(x,counts/(iLimit*jLimit));
title("直方图库函数");
subplot(1,3,3);
bar(Gray,GrayCount/(iLimit*jLimit));
title("自己编写的直方图函数");
MeanValue = MeanValueFun(InputImageGray)
VarValue = VarValueFun(InputImageGray)
figure(1);
imshow(InputImage); 
hold on;
title('InputImage');
plot(jMaxValueIndex,iMaxValueIndex,'*');
plot(jMinValueIndex,iMinValueIndex,'o');
legend("极大值点","极小值点");
text = sprintf('图像极大值为 %d, 极小值为 %d', MaxValue,MinValue);
title(text);

测试脚本结果

特征值
Fig1.求取特征值

 

直方图
Fig2.灰度直方图

注:

1.转载请注明出处。

2.并非作者不愿意使用库函数。

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值