Effacer les filtres
Effacer les filtres

How do I call BLOCKPROC with more than one input image?

4 vues (au cours des 30 derniers jours)
Sukuchha
Sukuchha le 8 Oct 2013
Commenté : Image Analyst le 15 Oct 2013
i have two images,and have a function which requires 3x3 sliding window data from both image A and image B. Is there a way to get it done with blockpro function. Any hint would be useful.

Réponses (2)

Image Analyst
Image Analyst le 8 Oct 2013
See demos attached below.
  4 commentaires
Sukuchha
Sukuchha le 15 Oct 2013
its because the result of the function depends on both 3x3 blocks of both image A and image B. I finally managed to get around with combining images like cat)3, imageA, imageB). then using blockproc with combine image. In the functin i have extracted imageA and imageB part to proceed with further processing. thx.
Image Analyst
Image Analyst le 15 Oct 2013
Sounds sort of complicated. What type of image are A and B? If they're color then you have 6 color channels on the cat'ed array, if they're grayscale, then you have 2. Usually image processing works with 1 or 3 color channels, not 2 or 6, so I'd be careful that it's doing what you expect. Why would you not do it like I said where you do it on A and then do it on B and then combine the results? That seems much more straightforward and less risky.

Connectez-vous pour commenter.


Ashish Uthama
Ashish Uthama le 10 Oct 2013
Modifié(e) : Ashish Uthama le 10 Oct 2013
Have a look at the Definitions section of the blockproc doc. Consider using the 'location' and 'blockSize' fields to index into the second variable.
>> im1 = ones(10);
>> im2 = ones(10)*2;
>> type myfun.m
function o = myfun(bs, im2)
im1Block = bs.data;
startInd = bs.location;
endInd = bs.location+bs.blockSize-1;
im2Block = im2(startInd(1):endInd(1), startInd(2):endInd(2));
o = im1Block+im2Block;
end
% This is the tricky part. Here, all of im2 gets 'snapshot'ed inthe function handle, so its available inside myfun when called via funcHandle inside blockproc (!).
>> funcHandle = @(bs)myfun(bs,im2);
>> blockproc(im1,[5 5],funcHandle)
ans =
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
>>
  1 commentaire
Sukuchha
Sukuchha le 15 Oct 2013
hi , i never knew ther is location properties. cheers. But i just combine mz images and extract part of imageA and imageB in my function handle for blockproc. thx.

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by