数字图像处理之直方图均衡化(Octave)

直方图的均衡化是什么呢?

举个简单的例子:在一个圆中有很多石头,都集中在圆心附近,对其均衡化就是让这些石头尽可能的均匀分布在圆这个区域内。
并且还有一个原则:如果石头A在原来状态下距离圆心的距离在所有石头是第4位,那么均衡化后仍然是第4位,相对顺序不能变。(大概就是一个拉的更宽了)。

那么要做一个怎么样的映射才能达到这种效果呢?

接下来要补充点概率论的知识了。

首先,一幅图像的灰度值可以看成[0,L-1]之间的随机变量。
然后,既然是随机变量,我们就可以计算每个变量的概率。
最后,有了每个变量的概率,我们就能计算出其概率密度函数(PDF probability denisty function)。

Ps(s) Pr(r) 分标识随机变量r和s的概率密度函数,其中 P 的下标用于标识 Ps(s) Pr(r) 是不同的函数。由基本概率论得到的一个基本结果是,如果 Pr(r) T(r)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以给你介绍一下手写体数字识别的代码实现。在Octave中,你可以使用机器学习算法来实现手写体数字识别。以下是一个简单的代码示例: 首先,你需要准备训练数据和测试数据。训练数据包含了一系列手写数字的图像和对应的标签,用于训练模型。测试数据则用于评估模型的准确性。 接下来,你可以使用Octave的机器学习库来构建一个分类模型。常用的算法包括支持向量机(SVM)和神经网络(Neural Network)。这里以神经网络为例。 1. 加载训练数据和测试数据: ```octave load('train_data.mat'); % 加载训练数据 load('test_data.mat'); % 加载测试数据 ``` 2. 定义神经网络模型: ```octave input_layer_size = 400; % 输入层大小(图像大小为20x20) hidden_layer_size = 25; % 隐藏层大小 num_labels = 10; % 输出层大小(数字0-9) % 随机初始化神经网络参数 initial_Theta1 = randInitializeWeights(input_layer_size, hidden_layer_size); initial_Theta2 = randInitializeWeights(hidden_layer_size, num_labels); initial_nn_params = [initial_Theta1(:) ; initial_Theta2(:)]; ``` 3. 训练神经网络模型: ```octave options = optimset('MaxIter', 50); % 设置迭代次数 lambda = 1; % 正则化参数 % 定义代价函数和梯度函数 costFunction = @(p) nnCostFunction(p, input_layer_size, hidden_layer_size, num_labels, X, y, lambda); [nn_params, cost] = fmincg(costFunction, initial_nn_params, options); ``` 4. 使用训练好的模型进行预测: ```octave pred = predict(Theta1, Theta2, X_test); % 预测测试数据 ``` 这只是一个简单的示例,实际的手写体数字识别代码可能更加复杂。你可以根据具体需求进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值