图像分块 matlab程序

看到不少网友,浏览了之前写读的图像分块简单版,现在将之前写的复杂版也贡献与大家一起学习、讨论。

clear,clc;

[filename,filepath] = uigetfile(‘*.*‘,‘Select the image‘);

if isequal(filename,0)||isequal(filepath,0)

return;

else

filefullpath=[filepath,filename];

end

%得到文件名,以便建立一个文件夹保存分块图像

[pathstr,name,ext] = fileparts(filename);

Im=imread(filefullpath);

% imshow(Im)

L = size(Im);

%分块大小

height=300;

width=400;

%重叠

x=0.25;

h_val=height*(1-x);

w_val=width*(1-x);

max_row = (L(1)-height)/h_val+1;

max_col = (L(2)-width)/w_val+1;

%判断能否完整分块

if max_row==fix(max_row)%判断是否能够整分

max_row=max_row;

else

max_row=fix(max_row+1);

end

if max_col==fix(max_col)%判断是否能够整分

max_col=max_col;

else

max_col=fix(max_col+1);

end

seg = cell(max_row,max_col);

for row = 1:max_row

for col = 1:max_col

if ((width+(col-1)*w_val)>L(2)&&((row-1)*h_val+height)<=L(1))%判断最右边不完整的部分

seg(row,col)= {Im((row-1)*h_val+1:height+(row-1)*h_val,(col-1)*w_val+1:L(2),:)};

elseif((height+(row-1)*h_val)>L(1)&&((col-1)*w_val+width)<=L(2))%判断最下边不完整的部分

seg(row,col)= {Im((row-1)*h_val+1:L(1),(col-1)*w_val+1:width+(col-1)*w_val,:)};

elseif((width+(col-1)*w_val)>L(2)&&((row-1)*h_val+height)>L(1))%判断最后一张

seg(row,col)={Im((row-1)*h_val+1:L(1),(col-1)*w_val+1:L(2),:)};

else

seg(row,col)= {Im((row-1)*h_val+1:height+(row-1)*h_val,(col-1)*w_val+1:width+(col-1)*w_val,:)}; %其余完整部分

end

end

end

imshow(Im);

hold on

system([‘mkdir ‘,name]);%创建与图片名相同的文件用来保存图片

paths=[pwd,‘\‘,name]; %获取指定文件夹目录

%保存子图

for i=1:max_row

for j=1:max_col

imwrite(seg{i,j},[paths,‘\‘,strcat(int2str(i),‘行‘,int2str(j),‘列‘,‘.bmp‘)]);   %把第i帧的图片写为‘mi.bmp‘

end

end

% 画框显示

for row = 1:max_row

for col = 1:max_col

c=rand(1,3);%随机颜色

rectangle(‘Position‘,[w_val*(col-1),h_val*(row-1),width,height],...

‘LineWidth‘,2,‘LineStyle‘,‘-‘,‘EdgeColor‘,c);

end

end

时间: 2024-10-12 21:10:13

图像分块 matlab程序的相关文章

MATLAB程序:用FCM分割脑图像

MATLAB程序:用FCM分割脑图像 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 脑图像基础知识请看:脑图像:FCM算法介绍请看:聚类——FCM:数据来源:BrainWeb: Simulated Brain Database,只选取脑图像中的0.1.2.3类,其余类别设为0.本文用到的数据:Simulated Brain Database 1. MATLAB程序 FCM_image_main.m function [accuracy,iter_F

二值法方法综述及matlab程序

在某些图像处理当中一个关键步是二值法,二值化一方面能够去除冗余信息,另一方面也会使有效信息丢失.所以有效的二值化算法是后续的处理的基础.比如对于想要最大限度的保留下面图的中文字,以便后续的定位处理. 二值化算法包括全局二值化和局部二值化, 全局二值化具有速度快但效果相对差的特点, 局部二值化算法具有速度慢效果好的特点. 原图 全局阈值              方法一:直接采用im2bw ;手动阈值 方法二:迭代法求阈值 迭代式阈值选取的基本思路是:首先根据图像中物体的灰度分布情况,选取一个近似

[图像]用Matlab在图像上画矩形框

原创文章,欢迎转载.转载请注明:转载自 祥的博客 原文链接:http://blog.csdn.net/humanking7/article/details/46819527 在毕业设计的时候写论文画图,要在一个图像上精确的标记出要处理的区域,用Photoshop或是其他绘图软件难免不精确,而且也不符合懒人思维(以后怎么办,要一劳永逸,嘿嘿),所以就自己写软件吧. 编程思想和注意事项 其实程序的思路很简单,就是在局域外面像素的值(颜色)覆盖掉就行了,但是要注意几点内容. 原图像通道问题(边框颜色问

[zz]求一维序列的信息熵(香浓熵)的matlab程序实例

对于一个二维信号,比如灰度图像,灰度值的范围是0-255,因此只要根据像素灰度值(0-255)出现的概率,就可以计算出信息熵.    但是,对于一个一维信号,比如说心电信号,数据值的范围并不是确定的,不会是(0-255)这么确定,如果进行域值变换,使其转换到一个整数范围的话,就会丢失数据,请高手指点,怎么计算. 比如数字信号是x(n),n=1~N(1)先用Hist函数对x(n)的赋值范围进行分块,比如赋值范围在0~10的对应第      一块,10~20的第二块,以此类推.这之前需要对x(n)做

Log和Canny边缘检测(附Matlab程序)

  一. 实验目的 (1) 通过实验分析不同尺度下LOG和Canny边缘提取算子的性能. (2) 研究这两种边缘提取方法在不同参数下的边缘提取能力. (3) 使用不同的滤波尺度和添加噪声能量(噪声水平),通过与无噪声图像对比,选择最能说明自己结论的滤波尺度和噪声水平,并做出分析说明. 二. 实验原理 边缘的含义:在数字图像中,边缘是指图像局部变化最显著的部分,边缘主要存在于目标与目标,目标与背景之间,是图像局部特性的不连续性,如灰度的突变.纹理结构的突变.颜色的突变等.尽管图像的边缘点产生的原因

【转】小波与小波包、小波包分解与信号重构、小波包能量特征提取 暨 小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)

转:https://blog.csdn.net/cqfdcw/article/details/84995904 小波与小波包.小波包分解与信号重构.小波包能量特征提取   (Matlab 程序详解) -----暨 小波包分解后解决频率大小分布重新排列问题 本人当前对小波理解不是很深入,通过翻阅网络他人博客,进行汇总总结,重新调试Matlab代码,实现对小波与小波包.小波包分解与信号重构.小波包能量特征提取,供大家参考,后续将继续更新! 本人在分析信号的过程中发现,按照网上所述的小波包分解方法理解

gdal读写图像分块处理

转自赵文原文 gdal读写图像分块处理(精华版) Review: 用gdal,感觉还不如直接用C++底层函数对遥感数据进行处理.因为gdal进行太多封装,如果你仅仅只是Geotif等格式进行处理,IO,遍历,转换,算法处理等操作,就别用gdal了.如果你想懒省事,那么这篇文章还是或许有些参考价值了.但是不推荐你这么做. 一.gdal进行数据操作 在安装好gdal后,即可调用gdal库中的函数. (需要包含的头文件:gdal_priv.h) 1.打开数据集 使用gdal库进行数据(影像)操作的第一

matlab 程序发布

将matlab程序发布为可执行程序包 说明,这种可执行程序包可以在没有安装matlab的计算机上运行. 1. 打开Applicaiton Compler 如果下拉列表中没有这个APPLICATIONDEPLOYMENT的话,可能是没有安装此组件.请通过添加Addons的方式,或者利用Matlab的安装程序安装. 在matlab 命令窗口中可以输入 deploytool 打开Application Compiler窗口. 2. 添加相关文件,并给出描述. 在打开的Application Compi

求解轨道力学二体意义下的Lambert方程(兰伯特方程)的Matlab程序

轨道力学中二体问题下求解兰伯特方程需要解决一个迭代问题. 这是一个老外写的,有很多注释,相信大家应该能看懂,经实际检测,切实可用 function [v1,v2]=solve_lambert(r1,r2,t,GM,lw,N,branch) %This routine implements a new algorithm that solves Lambert's problem. The %algorithm has two major characteristics that makes it