noise removal from the part of the medical image where noise is actually present, not the whole image

23 views (last 30 days)
i am doing one algorithm where i need to remove noise from an image , but i cant apply any kind of filter or any noise removal algorithm directly to the whole image since i am working in medical image and it might blur or might take any tissue or connected organ as a noise and remove it and will change my output. i would like to know the best possible way to remove noise from only those parts of the image where noise actually exists. thank you..

Accepted Answer

Bjorn Gustavsson
Bjorn Gustavsson on 18 Oct 2017
If you know what regions of the images you have noise that needs filtering why not just filter those regions? Something like this (one-region example):
regN = [i11,i12,i21,i22]; % corners of noisy region
ImgN = Im_full((regN(1)-1):(regN(2)+1),(regN(3)-1):(regN(4)+1)); Will break down for regions that extends to image edges, fix to suit needs
ImgN = wiener2(ImgN,[3,3]); % Or whatever filtering suits your images
Im_full(regN(1):regN(2),regN(3):regN(4)) = ImgN(2:end-1,2:end-1);
To me it sounds strange that you need to reduce noise in what seems to be "medically uninteresting" parts of images, while the parts of the images with organs and tissue should be left unfiltered with noise intact. Why not simply tell the doctors that the noisy parts of the images are left noisy to make them aware of the general noise characteristics of the images, that should be information that should help image interpretation.
HTH
  7 Comments
learningmat
learningmat on 20 Oct 2017
thank you for the reply sir..but i want to reduce the complexity so i dont want to apply the filtering to whole image, i want to apply to only the noisy part. Actually i can apply it for noisy part alone but how to indexing it in an array and replacing it with noisy part

Sign in to comment.

More Answers (2)

Kian Azami
Kian Azami on 18 Oct 2017
Edited: Kian Azami on 18 Oct 2017
You can do something as follow which I learned from one of the MathWorks STAFF:
close all
% Read the
I = imread('input.jpg');
% Remove noise
se1 = strel('disk',1);
I1 = imclose(I, se1);
se2 = strel('disk',2)
I2 = imopen(I1, se2);
% Original Image
figure
imshow(I)
% Image after noise
figure
imshow(I2)
Basically, imopen(I,se1) will remove the pixels that are left alone.
Then, imclose(I1,se2) will do the opposite. It will unite the pixels with the same color.
se1 and se2 are the structures that tell imopen and imclose how to remove or unite the pixels.
By the command 'strel' you define the zone by which you can remove or unite the pixels. For example, strel('disk',2) is a disk like zone with a dimension of 2. So, when you apply this structure in your image by 'imopen' it will divide the image into disk like shapes with the dimension of 2 and if it see discontinuity with the picture colors it will remove the pixels in that zone which is possibly a noise. You can play with the dimensions and see the change in your image.
You can define many different kinds of strel and if you go to help you can see them: strel Documentation
Here I put the link of the similar question that I asked before: Noise Removal

Image Analyst
Image Analyst on 18 Oct 2017
I agree with Bjorn - the radiologist will be able to mentally filter out the noisy areas.
If you still want to do it for some reason, then you'll have to find a mask for identifying the noisy areas (for example use stdfilt() but exclude edge regions), then remove noise for the entire image, and replace the noise pixels with noise free pixels.
mask = some algorithm to identify noisy regions.
noiseFreeImage = ReduceNoise(grayImage); % Remove noise over the entire image.
noiseReducedImage = grayImage; % Initialize.
% Replace pixels in noise region with noise-free pixels.
noiseReducedImage (mask) = noiseFreeImage(mask);

Community Treasure Hunt

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

Start Hunting!