矩形区域求和问题

矩形区域不超过K的最大数值和

题目出处:https://leetcode-cn.com/problems/max-sum-of-rectangle-no-larger-than-k/
在这里插入图片描述
问题的转换:

  1. 二维问题转换成一维问题:枚举区域中矩形的上下边界,在当前以i为上边界,j为下边界的矩形中,对每一列求和,放入SumCol中。此时问题就转换为“在一维数组nums中,找出某个最大区间和,满足Sr-Sl <= k”,其中Si=nums0+nums1+…+sumi。因此还需对得到的一维数组计算每个位置的前缀和,放入数组PreSum中。
  2. 遍历一维数组PreSum。从左到右遍历,将遍历过的元素放入一个有序集合中(当前元素之前的所有元素都在该有序集合中),当遍历到PreSum[r]时,就在这个集合中查找是否存在一个元素PreSum[l]使得PreSum[l]>=PreSum[r]-k,求出PreSum[l]的最小值t,若存在该最小值t,则更新ans=min(ans, PreSum[r]-t),将当前元素PreSum[r]放入集合中;不若存在最小值t,也将当前元素PreSum[r]放入集合中,则继续遍历PreSum。
class Solution {
public:
    int maxSumSubmatrix(vector<vector<int>>& matrix, int k) {
        int ans = INT_MIN;
        int m = matrix.size(), n = matrix[0].size();
        for(int i = 0; i < m; ++i){  //枚举矩形的上边界
            vector<int> SumCol(n, 0);
            for(int j = i; j < m; ++j){  //枚举矩形的下边界
                for(int c = 0; c < n; ++c){   //统计每一列的元素和,放入SumCol中
                    SumCol[c] += matrix[j][c];
                }
                set<int> st{0};
                int SUM = 0; 
                //vector<int> PreSum(n, 0);  //定义前缀和,枚举r
                for(int v : SumCol){
                    SUM += v;
                    //PreSum[i] = SUM;
                    auto lb = st.lower_bound(SUM-k);
                    if(lb != st.end()){
                       ans = max(ans, SUM-*lb);
                    }
                    st.insert(SUM);  
                }
            }
        }

        return ans;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SURF算法是一种用于图像特征提取的算法,其中根据特征点的主方向,选取4*4矩形区域块,每一个子区域提取水平、垂直方向上的25个像素中的波特信号。这些子区域是相对于特征点的主方向进行提取的,这样可以更好地捕捉图像的局部特征。 在SURF算法中,提取子区域的方法是使用Haar小波。Haar小波是一种含四个方向的小波,包括垂直、水平、水平上的绝对值及垂直上的绝对值。这些方向可以很好地捕捉图像中的不同特征,例如边缘、角点等。 对于每个子区域,SURF算法使用Haar小波进行特征提取,得到各个方向上的波特信号。这些波特信号可以用于描述子区域的特征,例如边缘的方向和强度等。通过对整个图像的多个子区域进行特征提取,SURF算法可以得到一个全局的特征向量,用于描述整个图像的局部特征。 总之,SURF算法利用Haar小波提取图像的局部特征,可以用于各种计算机视觉任务,例如目标检测、图像匹配等。 ### 回答2: SURF算法中,根据特征点主方向,选取4*4矩形区域块,每一个子区域提取水平、垂直方向上的25个像素中的波特信号,其中水平、垂直方向是相对主方向的。Haar小波是一种含四个方向的小波,包括垂直、水平、水平上的绝对值及垂直上的绝对值。 我们可以将这段话进行改写并扩充:在SURF算法中,根据特征点的主方向,我们选择了一个4*4的矩形区域块。在该区域块中,我们进一步提取子区域中的像素波特信号。对于每一个子区域,我们在水平和垂直方向上选择了25个像素进行信号提取,并且这些方向是相对于主方向的。为了实现信号提取,我们使用了Haar小波。 Haar小波是一种非常常用的小波变换基函数,它包括四个方向:垂直、水平、水平上的绝对值和垂直上的绝对值。通过应用Haar小波,我们可以获得四个不同方向上的波特信号。 在提取特征点的过程中,我们首先根据主方向确定了矩形区域块,然后使用Haar小波提取每个子区域中的像素波特信号。这些波特信号在水平和垂直方向上选取了25个像素,这些方向是相对于主方向的。通过这种方式,我们可以对图像中的特征点进行更准确和全面的描述和分析,提高图像处理的效果和准确率。 ### 回答3: SURF算法中,通过选取4*4矩形区域块来进行特征点提取和描述子生成。在每一个子区域中,我们会根据特征点的主方向来选择水平和垂直方向上的像素进行波特信号的提取。 波特信号是通过Haar小波进行计算的。Haar小波是一种含有四个方向的小波,包括垂直、水平、水平上的绝对值及垂直上的绝对值。这四个方向分别代表了不同的特征信息,通过计算这些方向上的像素差值,可以得到更具体的特征描述。 在SURF算法中,我们将特征点的主方向作为基准方向,水平和垂直方向相对于主方向进行计算。对于每一个子区域,我们选取其中水平方向上的25个像素以及垂直方向上的25个像素,分别计算其在Haar小波上的投影,得到这四个方向上的波特信号。 具体计算方法是将选取的像素灰度值进行加权求和,然后与相应的Haar小波模板进行卷积运算,得到在每个方向上的投影值。这些投影值就构成了波特信号,在描述子生成阶段会被用来表示该特征点的特征信息。 通过选取特征点的主方向和提取水平、垂直方向上的像素中的波特信号,SURF算法可以更准确地捕捉到图像中的特征信息,使得特征点的描述子更具有可区分性和鲁棒性。这样可以有效地应对图像的旋转、尺度变化等问题,提高了特征点匹配的准确性和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值