image2cols:图像分块

function patches = image2cols(im, pSz, stride)
if nargin < 3,stride = 1;             % stride:表示块间的偏移
end
range_y = 1:stride:size(im, 1)-pSz+1;
range_x = 1:stride:size(im, 2)-pSz+1;
if range_y(end) ~= size(im, 1)-pSz+1,range_y = [range_y size(im, 1)-pSz+1];% 显然 size(im, 1)-pSz+1 也是可以访问的
end
if range_x(end) ~= size(im, 2)-pSz+1,range_x = [range_x size(im, 2)-pSz+1];
end
patches = zeros(pSz^2, length(range_y)*length(range_x));
idx = 1;
for y = range_y,for x = range_x,p = im(y:y+pSz-1, x:x+pSz-1);patches(:, idx) = p(:);% 如果行表示块,patches(idx, :) = p(:)';idx = idx+1;end
end

cols2image:根据块复原原始图像(有些tricky)

function img = cols2image(patches, sz, stride)
if nargin < 3,stride = 1;
end
pSz = sqrt(size(patches, 1));
range_y = 1:stride:sz(1)-pSz+1;
range_x = 1:stride:sz(2)-pSz+1;
if range_y(end) ~= sz(1)-pSz+1,range_y = [range_y sz(1)-pSz+1];
end
if range_x(end) ~= sz(2)-pSz+1,range_x = [range_x sz(2)-pSz+1];
end
img = zeros(sz);
w = zeros(sz);
idx = 1;
for y = range_y,for x = range_x,img(y:y+pSz-1, x:x+pSz-1) = img(y:y+pSz-1, x:x+pSz-1) + reshape(patches(:, idx), pSz, pSz);w(y:y+pSz-1, x:x+pSz-1) = w(y:y+pSz-1, x:x+pSz-1) + 1;% 加了多少次idx = idx + 1;end
end
img = img./w;

demo

clc; clear; close all;
I = imread('./lena.png');
sz = size(I);
pSz = 5; stride = 2;% 增大 stride,也即增大块间的偏移,减少块的数目
patches = image2cols(I, pSz, stride);
img = cols2image(patches, sz, stride);
imshow(uint8(img))

utilities(matlab)—— 图像分块(image2cols、cols2image)相关推荐

  1. Matlab 图像分块(不重叠、重叠)

    https://blog.csdn.net/jizhidexiaoming/article/details/84036665

  2. matlab 图像分块及恢复

    1. block_divide % 返回的块向量构成的矩阵,其维度信息为 K^2 * N,每一列由块构成的列向量 function P = block_divide(I, K)r = size(I, ...

  3. matlab图像大作业,MATLAB图像大作业

    [实例简介] Matlab 图像处理 人脸识别 等等 包括 jpeg仿真... end end end back=)*examplekd'i end 得到的 differenc最大值为1.232902 ...

  4. MATLAB图像去雾自适应增强

    MATLAB图像去雾自适应增强 摘要:传统的单幅图像去雾方法中大气光强度仅设定为与图像最亮象素有关的经验值,容易造成去雾后的图像亮度偏暗,且某些区域色彩还原失真等问题.本文提出一种大气光强度自适应恢复 ...

  5. OpenCV 【一】—— OpenCV中数组指针、图像分块计算、指针取像素值与MatToEigen方法,内存对齐

    { Topic1: 高效开辟内存,使适用于大型数组.//开辟新数组,或者开辟新的0或者某一数值的数组/Mat或者Map直接使用memset //大数组操作效率较高 举例1:cv::Mat cv_ncc ...

  6. matlab图像融合评价,MATLAB 图像融合评估算法

    MATLAB 图像融合评价算法 function laplacian(ori_A,ori_B) path(path,'FusionEvaluation/') %Ori_A = imread('cloc ...

  7. matlab 图像操作函数的详解

    转自博客:http://blog.163.com/fei_lai_feng/blog/static/9289962200991713415422/ 一. 读写图像文件 1. imread imread ...

  8. 【Matlab 图像】滤波器原理使用及测试效果

    滤波器使用及测试效果 滤波器1:低通滤波 原理 代码 效果 滤波器2:高斯平滑 原理 代码 效果 滤波器3:自适应中值滤波 原理 代码 效果 滤波器4:维纳滤波 原理 代码 效果 滤波器5:最大值滤波 ...

  9. 【Matlab 图像】边缘检测算法及效果演示

    [Matlab 图像]边缘检测算法及效果演示 边缘检测 检测图像中的边缘 Matlab 代码 代码效果如下 边缘算法:robert 边缘算法:sobel prewitt 边缘算法:laplacian ...

最新文章

  1. 【算法】BFS刷题总结
  2. 研究报告:城市大脑的起源、现状与未来趋势
  3. MyBatisPlus条件构造器中last方法怎样使用
  4. python时间差转换成天数_Python实现计算两个时间之间相差天数的方法
  5. Java版本的Bot Framework SDK
  6. P3190-[HNOI2007]神奇游乐园【插头dp】
  7. Android实现边缘凹凸的View
  8. python mysql 保存csv_使用Python将csv文件快速转存到Mysql
  9. Java语言概述及常用DOS命令
  10. 微信浏览器中IOS12键盘回弹的问题
  11. 机器学习-python的工作目录
  12. 搭建DNS服务,正向解析域名
  13. python后台架构Django教程——templates模板
  14. 台式计算机cpu多高,台式机硬件正常温度是多少
  15. GeoServer中利用SLD配图之矢量图层配图
  16. matlab从无到有系列(九):Simulink基础仿真详解(全网最全,从入门到放弃)
  17. 什么是write-allocate policy?
  18. 对Vuejs框架“渐进式”的理解
  19. 微机原理与接口技术:接口概述 详细笔记
  20. 详解StringTokenizer函数

热门文章

  1. Scala的初步学习(一)
  2. Mysql 引优化分析
  3. Phoenix命令及语法
  4. java工程如何使用ivew_vue+iview搭建项目
  5. LeetCode 304. 二维区域和检索 - 矩阵不可变(动态规划)
  6. caffe(4):mnist实例---手写数字识别
  7. ad19 导出step 没有pcb_PCB设计导出Gerber基本操作及注意事项(三)
  8. codeforces 792CDivide by Three(两种方法:模拟、动态规划
  9. [HAOI2005] 希望小学
  10. I - Destroy Walls (HDU - 6187)