Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Matlab:打开最小矩形大小的二值图像

Matlab:打开最小矩形大小的二值图像
EN

Stack Overflow用户
提问于 2014-01-02 13:37:01
回答 2查看 566关注 0票数 4

我有一个二值图像:

我想看看一个100x150长方形是否适合地图上的任何空格。我试着创建一个长方形条纹,然后侵蚀和扩展图片,以去除任何比需要小的区域:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
se = strel('rectangle',[150, 100]);
BW = imerode(BW,se);
BW = imdilate(BW,se);

不幸的是,它过早地发现了一个洞。

只有80x150。我认为侵蚀是失败的,因为它是对墙&只需要一半的宽度,但不知道如何修复它。

另外,如果我走错了路,请让我直截了当。最终,我只需要找到一个空格的左上角至少有100x150大小。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-02 17:19:04

下面的方法工作得很好,运行得相当快。它有几个嵌套循环,但是您可能可以进一步优化性能,我主要想让它为您工作。不过,请记住,如果您注释掉了fprintf()和绘图命令,这将加快速度。

我从您的Stack帖子下载了您的图像,但是我相信我下载的版本的大小(398x398)与您正在处理的原始数据不同,所以在查看下面的结果时请记住这一点。

如代码所示,您提供了宽度(w)和高度(h),然后算法返回矩形可以适合的所有(col,行)位置。

侧注:--我相信这为2D版本的http://en.wikipedia.org/wiki/Bin_packing_problem提供了一个解决方案,但我不确定,如果您感兴趣的话,可以查看上面的链接。

无论哪种方式,它都是计算问题的一个很好的例子,在这种情况下,彻底的搜索可以很快地执行。

为了验证结果,我添加了矩形的简单绘图。请记住,如果矩形位于多个位置,则多个矩形的图形开始显得非常混乱,因为它们被反复绘制在另一个位置上(带有偏移)。

例如,在只找到一个矩形的情况下,我使用:w = 29; h = 102;,然后结果显示,这个特定矩形唯一适合的位置是左上角= (row = 295, col = 368) (这个矩形大小很可能只适用于我下载的数据版本):

总之,我首先加载数据,然后转换为二进制映射(0和1):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% Note: '0' = black; '1' = white
data = round(im2double(rgb2gray(imread(filepath))));
figure(1);imshow(data); set(gcf,'Color',[1 1 1]);
hold on;

输入搜索宽度和高度:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
w = 29;
h = 102;

sze = size(data);
numRows = sze(1);
numCols = sze(2);

接下来,我们只需进行搜索,看看哪些位置适合每一行和每一个位置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for col = 1:numCols - w - 1
    for row = 1:numRows - h - 1
        doesFit = fitshere(data, row,col, w, h);
        if (doesFit == 1)
            fprintf('row = %d; col = %d \n',row,col);
            colX = [col col+w col+w col col];
            colY = [row row row+h row+h row];
            line(colX,colY,'Color','r','linewidth',2);
        end
    end
end

hold off;

您将需要以下函数来检查给定的矩形是否适合数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function [val] = fitshere(data, row, col, w, h)
val = 1;
for i = col:col + w
    for j = row:row + h
        if (data(j,i) == 0) % if this is true, we are in the black!
            val = 0;
            return;
        end
    end
end
return;

如果您有兴趣知道您的矩形是否适合(例如width X heightheight X width),您只需在交换宽度和高度之后重复搜索即可。

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2014-01-03 07:40:19

让我们用一些matlab成语来做这件事。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
M=binaryImage;
sz=size(M);
nrows = 100;
ncols = 150 ;

colsum = cumsum(M,1);
cols_are_good = colsum(nrows+1:end,:)-colsum(1:end-nrows+1,:)==0; 
    %  nrows empty rows below this point. in this column
rows_are_also_good = cols_are_good(:,ncols+1:end)-cols_are_good(:,1:end+1-ncols)==0;

鲍勃是你的叔叔,最后一个变量在所有地方都包含了一个,在它们下面有一行,每个地方旁边都有ncols。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20892372

复制
相关文章
matlab | 二值图像分割
基本原理 原始图像f(x,y) 灰度阈值T 阈值运算的二值图像g(x,y) 全局阈值是最简单的图像分割方法。
福贵
2019/06/05
1.9K0
最小的矩形
牛牛在二维坐标系中画了N个点,且都是整点。现在牛牛想画出一个矩形,使得这N个点都在矩形内或者在矩形上。 矩形的边均平行于坐标轴。牛牛希望矩形的面积最小。请你帮助牛牛计算下最小矩形的面积。 输入描述: 首先输入一个正整数N表示点的个数(2 <= N <= 50)
AI那点小事
2020/04/20
8960
matlab 实现二值图像孔洞填充函数imfill()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/29
7120
[图像]用Matlab在图像上画矩形框
原文链接:http://blog.csdn.net/humanking7/article/details/46819527
祥知道
2020/03/10
3.5K0
matlab二值图像孔洞填充_matlab边缘检测之后怎么填充
subplot(1,2,1),imshow(img_bw), title(‘有空洞的图像’);
全栈程序员站长
2022/09/30
1.3K0
matlab二值图像孔洞填充_matlab边缘检测之后怎么填充
matlab灰度最大值和最小值_matlab灰度直方图
el = sp.ndimage.generate_binary_structure(2,2).astype(np.int)
全栈程序员站长
2022/10/02
6560
使用Matlab现成函数实现二值图像的闭合区域标记。
1、点击[Matlab] 2、点击[命令行窗口] 3、按<Enter>键
裴来凡
2022/05/28
1.1K0
使用Matlab现成函数实现二值图像的闭合区域标记。
java integer范围值的大小_求最大值最小值的代码
最近在刷leetcode的题时,才发现有几道题的利用到Integer类型的最大值和最小值,尤其是在判断是否溢出的时候,有道题就非常经典直接判断最后一位,比如最大值231 – 1的最后一位是7,而最小值 -231 的最后一位是8,这样进行一个判断 8. 字符串转换整数 (atoi) 这道题对我在面试过程中被问到如何判断是否溢出有了很大启发 查下JDK1.6帮助文档是这样写的
全栈程序员站长
2022/10/04
1.3K0
java integer范围值的大小_求最大值最小值的代码
Matlab实现二值图像进行交、并等集合运算。
1、点击[Matlab] 2、点击[命令行窗口] 3、按<Enter>键
裴来凡
2022/05/28
6590
Matlab实现二值图像进行交、并等集合运算。
最小矩形包围框
返回值rect: ((227.5, 62.0), (109.0, 104.0), -0.0) 转换后points: [[173. 114.] [173. 10.] [282. 10.] [282. 114.]]
裴来凡
2022/05/28
6860
最小矩形包围框
matlab插值拟合(二)
上一篇给大家介绍了如何使用matlab拟合工具箱进行函数的插值拟合,今天介绍matlab中常用的拟合函数:polyfit和fittype。
巴山学长
2019/07/15
1.5K0
matlab插值拟合(二)
SSE图像算法优化系列七:基于SSE实现的极速的矩形核腐蚀和膨胀(最大值和最小值)算法。
用户1138785
2018/01/03
1.8K0
SSE图像算法优化系列七:基于SSE实现的极速的矩形核腐蚀和膨胀(最大值和最小值)算法。
矩形载体图像
算法:矩形载体是为了更好地检测出人脸,在图像上绘制不同颜色和大小的矩形的基础操作。除此之外,还有绘制直线、矩形、圆、椭圆等多种几何图形,并且可以在图像中的指定位置添加文字说明。
裴来凡
2022/05/28
3680
矩形载体图像
【Matlab代码】蚁群算法解得最小值
clc; clear; f = inline('20 + x.^2 + y.^2 -10*(cos(2*pi*x) + cos(2*pi*y))'); x = -5:0.01:5; y = -5:0.01:5; [X,Y] = meshgrid(x,y); F = f(X,Y); figure(1); mesh(X,Y,F); xlabel('横坐标x'); ylabel('纵坐标y'); zlabel('空间坐标z'); hold on; lower_x = -5; upper_x = 5; lower
裴来凡
2022/05/28
8640
【Matlab代码】蚁群算法解得最小值
【OpenCV视觉】图像的二值化
谢谢!
EdenChen
2018/07/25
8450
【OpenCV视觉】图像的二值化
调整图像大小的三种插值算法总结
这种类型的插值是最基本的。我们简单地将最近的像素插值到当前像素。假设,我们从0开始索引像素的值。下面2x2图像的像素如下:{' 10 ':(0,0),' 20 ':(1,0),' 30 ':(0,1),' 40 ':(1,1)}
deephub
2021/07/01
2.8K0
matlab | 二值形态学处理
图像的二值形态学处理,是利用集合论的思想,能够简化图像数据,保持基本形状特征,除去不相干的结构,此外还能并行实现。
福贵
2019/05/30
8290
大神带你玩转matlab图像处理(二)
图像边缘是图像中重要特性(如像素灰度、纹理等)分布的不连续处,图像周围特性有阶跃变化或屋脊状变化的那些像素集合。图像的边缘部分集中了图像的大部分信息,一幅图像的边缘结构与特点往往是决定图像特质的重要部分。图像边缘的另一个定义是指其周围像素灰度变化不连续的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间,因此,边缘是图像分割及图像识别中的重要特征。
巴山学长
2020/02/17
1.1K0
大神带你玩转matlab图像处理(二)
最小二乘法原理及matlab实现
最小二乘法(least squares method),也称最小平方法,是一种古老而常用的数学工具,在自然科学、工程技术和人工智能等领域有着广泛地应用,其核心原理就是通过将误差平方和最小化来寻找数据的最佳匹配函数。
巴山学长
2019/10/14
2.8K0
最小二乘法原理及matlab实现
【短道速滑八】圆形半径的图像最大值和最小值算法的实现及其实时优化(非二值图)
在图像处理中,我们可以看到很多函数都是带有半径这个参数的,不过99%的情况下这个半径其实都是矩形的意思,在目前我所实现的算法中,也只有二值图像的最大值和最小值我实现了圆形半径的优化,可以参考:SSE图像算法优化系列二十五:二值图像的Euclidean distance map(EDM)特征图计算及其优化 一文,这里通过特征图实现了圆形半径算法的O(1)算法。
用户1138785
2021/12/24
6360
【短道速滑八】圆形半径的图像最大值和最小值算法的实现及其实时优化(非二值图)

相似问题

如何在matlab中绘制灰度二值图像中的矩形

11

用matlab实现图像周围区域的最小矩形包围盒

13

样式中矩形的最小大小

10

二值图像的困难(MATLAB)

25

Matlab中的二值图像

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文